Saya baru saja menyelesaikan sebuah artikel analisis tentang reentrancy - masalah keamanan yang masih banyak developer abaikan saat membangun smart contracts.



Sederhananya, reentrancy adalah ketika sebuah kontrak pintar dipanggil kembali berkali-kali sebelum panggilan pertama selesai. Bayangkan seperti ini: ContractA sedang menjalankan sebuah fungsi, dia memanggil ContractB, dan ContractB malah memanggil kembali ContractA sementara ContractA belum selesai. Itu adalah celah yang bisa dieksploitasi oleh penyerang.

Contoh spesifik: EtherStore memiliki 10 Ether, ContractB telah mengirim 1 Ether ke sana. Ketika ContractB memanggil fungsi penarikan, dia memeriksa apakah saldo lebih besar dari 0, jika iya, mengirim Ether kembali. Tapi di sinilah bahaya - pembaruan saldo menjadi 0 terjadi setelah pengiriman Ether. Jadi, penyerang bisa membuat sebuah fungsi fallback yang, saat menerima Ether, akan memanggil lagi fungsi penarikan sekali lagi. Loop ini akan berlanjut sampai semua Ether habis.

Saya akan menunjukkan tiga cara untuk mencegah reentrancy:

Pertama adalah menggunakan modifier nonReentrant. Cara ini mengunci kontrak saat fungsi sedang berjalan, sehingga tidak ada yang bisa memanggil kembali. Sederhana tapi efektif untuk satu fungsi saja.

Kedua adalah menerapkan pola Checks-Effects-Interactions. Alih-alih memperbarui saldo setelah mengirim uang, lakukan sebelum. Dengan cara ini, bahkan jika terjadi panggilan kembali, saldo sudah menjadi 0 sehingga pemeriksaan akan gagal.

Ketiga adalah membuat kontrak GlobalReentrancyGuard terpisah. Cara ini menggunakan sebuah variabel status bersama untuk mengendalikan reentrancy di banyak kontrak sekaligus. Sangat berguna jika proyek Anda memiliki banyak kontrak yang berinteraksi satu sama lain. Alih-alih memeriksa di setiap kontrak, Anda memeriksa di satu tempat terpusat.

Masalah reentrancy bukanlah hal baru, tetapi tetap menjadi salah satu celah paling umum. Saya melihat banyak developer yang belum menerapkan langkah-langkah ini secara konsisten. Jika Anda bekerja dengan Solidity, pastikan Anda memahami masalah ini dan menerapkan minimal satu dari tiga metode di atas dalam proyek Anda. Keamanan smart contract bukanlah pilihan, itu adalah keharusan.
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • Komentar
  • Posting ulang
  • Bagikan
Komentar
Tambahkan komentar
Tambahkan komentar
Tidak ada komentar
  • Sematkan