Daftar periksa keamanan kontrak pintar
Daftar periksa pengembangan kontrak pintar
Berikut adalah proses tingkat tinggi yang kami sarankan untuk diikuti saat Anda menulis kontrak pintar Anda.
Periksa masalah keamanan yang diketahui:
- Tinjau kontrak Anda dengan Slither (terbuka di tab baru). Alat ini memiliki lebih dari 40 detektor bawaan untuk kerentanan umum. Jalankan pada setiap check-in dengan kode baru dan pastikan mendapatkan laporan yang bersih (atau gunakan mode triase untuk membisukan masalah tertentu).
- Tinjau kontrak Anda dengan Crytic (terbuka di tab baru). Alat ini memeriksa 50 masalah yang tidak diperiksa oleh Slither. Crytic juga dapat membantu tim Anda untuk saling memantau, dengan memunculkan masalah keamanan secara mudah di Pull Request pada GitHub.
Pertimbangkan fitur khusus dari kontrak Anda:
- Apakah kontrak Anda dapat ditingkatkan (upgradeable)? Tinjau kode peningkatan Anda untuk mencari kelemahan dengan
slither-check-upgradeability(terbuka di tab baru) atau Crytic (terbuka di tab baru). Kami telah mendokumentasikan 17 cara peningkatan bisa menjadi bermasalah. - Apakah kontrak Anda dimaksudkan untuk mematuhi ERC? Periksa dengan
slither-check-erc(terbuka di tab baru). Alat ini secara instan mengidentifikasi penyimpangan dari enam spesifikasi umum. - Apakah Anda berintegrasi dengan token pihak ketiga? Tinjau daftar periksa integrasi token kami sebelum mengandalkan kontrak eksternal.
Periksa secara visual fitur keamanan penting dari kode Anda:
- Tinjau pencetak inheritance-graph (terbuka di tab baru) dari Slither. Hindari masalah shadowing yang tidak disengaja dan masalah linearisasi C3.
- Tinjau pencetak function-summary (terbuka di tab baru) dari Slither. Ini melaporkan visibilitas fungsi dan kontrol akses.
- Tinjau pencetak vars-and-auth (terbuka di tab baru) dari Slither. Ini melaporkan kontrol akses pada variabel state.
Dokumentasikan properti keamanan penting dan gunakan pembuat pengujian otomatis untuk mengevaluasinya:
- Pelajari cara mendokumentasikan properti keamanan untuk kode Anda. Awalnya memang sulit, tetapi ini adalah aktivitas tunggal yang paling penting untuk mencapai hasil yang baik. Ini juga merupakan prasyarat untuk menggunakan teknik lanjutan apa pun dalam tutorial ini.
- Tentukan properti keamanan di Solidity, untuk digunakan dengan Echidna (terbuka di tab baru) dan Manticore (terbuka di tab baru). Fokus pada mesin state Anda, kontrol akses, operasi aritmatika, interaksi eksternal, dan kesesuaian standar.
- Tentukan properti keamanan dengan API Python Slither. Fokus pada pewarisan, dependensi variabel, kontrol akses, dan masalah struktural lainnya.
- Jalankan pengujian properti Anda pada setiap komit dengan Crytic (terbuka di tab baru). Crytic dapat mengonsumsi dan mengevaluasi pengujian properti keamanan sehingga semua orang di tim Anda dapat dengan mudah melihat bahwa pengujian tersebut lulus di GitHub. Pengujian yang gagal dapat memblokir komit.
Terakhir, perhatikan masalah yang tidak dapat dengan mudah ditemukan oleh alat otomatis:
- Kurangnya privasi: semua orang dapat melihat transaksi Anda saat sedang mengantre di dalam pool
- Transaksi front running
- Operasi kriptografi
- Interaksi berisiko dengan komponen keuangan terdesentralisasi (DeFi) eksternal
Minta bantuan
Jam kerja Ethereum (terbuka di tab baru) diadakan setiap Selasa sore. Sesi 1 lawan 1 selama 1 jam ini adalah kesempatan untuk menanyakan pertanyaan apa pun yang Anda miliki tentang keamanan, memecahkan masalah menggunakan alat kami, dan mendapatkan umpan balik dari para ahli tentang pendekatan Anda saat ini. Kami akan membantu Anda menyelesaikan panduan ini.
Bergabunglah dengan Slack kami: Empire Hacking (terbuka di tab baru). Kami selalu tersedia di saluran #crytic dan #ethereum jika Anda memiliki pertanyaan.