Rust smart contract pengembangan jurnal (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan konten terkait kontrol akses dalam smart contract Rust dari dua sudut pandang:
Visibilitas akses/panggilan metode (fungsi) kontrak
Kontrol akses fungsi khusus/pemisahan tanggung jawab
1. Visibilitas Fungsi (Metode) Kontrak
Saat menulis smart contract, dengan menentukan visibilitas fungsi kontrak, Anda dapat mengontrol hak akses fungsi tersebut. Ini sangat penting untuk melindungi bagian-bagian kunci dalam kontrak agar tidak diakses atau dimanipulasi secara tidak sengaja.
Sebagai contoh di bursa Bancor Network, pada 18 Juni 2020, terjadi sebuah insiden keamanan yang disebabkan oleh kesalahan pengaturan kontrol akses fungsi kunci pada kontrak. Kontrak tersebut ditulis dalam bahasa Solidity, dengan visibilitas fungsi dibagi menjadi public/external dan private/internal.
Bancor saat memperbaiki kerentanan keamanan, secara keliru mengubah beberapa fungsi transfer penting menjadi atribut public, yang memungkinkan siapa pun untuk memanggil fungsi-fungsi ini dari luar kontrak untuk melakukan operasi transfer, sehingga aset pengguna senilai 590 ribu dolar menghadapi risiko serius.
Dalam smart contract Rust, kontrol visibilitas fungsi juga sangat penting. Fungsi kontrak yang dihias dengan makro #[near_bindgen] yang didefinisikan oleh NEAR SDK memiliki beberapa atribut visibilitas sebagai berikut:
pub fn: fungsi publik, merupakan bagian dari antarmuka kontrak, dapat dipanggil dari luar kontrak.
fn: Fungsi yang tidak disebutkan pub, hanya dapat dipanggil di dalam kontrak.
pub(crate) fn: Batasi panggilan dalam jangkauan crate.
Cara lain untuk mengatur metode sebagai internal adalah dengan mendefinisikan blok kode impl Contract yang tidak diberi tanda #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai atribut public agar dapat dipanggil melalui function call. Selain itu, perlu dipastikan bahwa fungsi callback hanya dapat dipanggil oleh kontrak itu sendiri, dapat menggunakan makro #[private].
2. Kontrol Akses Fungsi Privilege ( Mekanisme Daftar Putih )
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Beberapa fungsi istimewa (seperti inisialisasi kontrak, membuka/menangguhkan, transfer terpusat, dll.) hanya dapat dipanggil oleh pemilik kontrak (owner).
Dapat mengimplementasikan Trait kustom untuk mengontrol akses fungsi istimewa, memeriksa apakah pemanggil transaksi adalah pemilik kontrak:
Berdasarkan prinsip ini, Anda dapat mengatur beberapa pengguna atau beberapa daftar putih dalam daftar putih dengan menyesuaikan trait yang lebih kompleks, untuk mewujudkan kontrol akses grup yang lebih rinci.
3. Metode Kontrol Akses Lebih Lanjut
Metode kontrol akses lainnya dalam kontrak pintar Rust termasuk:
Kontrol waktu pemanggilan kontrak
Mekanisme panggilan multisig untuk fungsi kontrak
Pemerintahan(DAO) yang diimplementasikan
Konten ini akan dijelaskan secara rinci dalam seri catatan pengembangan smart contract yang akan datang.
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.
9 Suka
Hadiah
9
4
Bagikan
Komentar
0/400
not_your_keys
· 1jam yang lalu
Saya masih tidak bisa memahami kerentanan Bancor itu sampai sekarang.
Lihat AsliBalas0
SigmaBrain
· 20jam yang lalu
Memang pelajaran dari Bancor sangat mengena.
Lihat AsliBalas0
NewPumpamentals
· 20jam yang lalu
Lagi membahas kontrol izin, kenapa tidak belajar dari pelajaran Bancor?
Kontrol akses izin kontrak pintar Rust: visibilitas fungsi dan manajemen akses istimewa
Rust smart contract pengembangan jurnal (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan konten terkait kontrol akses dalam smart contract Rust dari dua sudut pandang:
1. Visibilitas Fungsi (Metode) Kontrak
Saat menulis smart contract, dengan menentukan visibilitas fungsi kontrak, Anda dapat mengontrol hak akses fungsi tersebut. Ini sangat penting untuk melindungi bagian-bagian kunci dalam kontrak agar tidak diakses atau dimanipulasi secara tidak sengaja.
Sebagai contoh di bursa Bancor Network, pada 18 Juni 2020, terjadi sebuah insiden keamanan yang disebabkan oleh kesalahan pengaturan kontrol akses fungsi kunci pada kontrak. Kontrak tersebut ditulis dalam bahasa Solidity, dengan visibilitas fungsi dibagi menjadi public/external dan private/internal.
Bancor saat memperbaiki kerentanan keamanan, secara keliru mengubah beberapa fungsi transfer penting menjadi atribut public, yang memungkinkan siapa pun untuk memanggil fungsi-fungsi ini dari luar kontrak untuk melakukan operasi transfer, sehingga aset pengguna senilai 590 ribu dolar menghadapi risiko serius.
Dalam smart contract Rust, kontrol visibilitas fungsi juga sangat penting. Fungsi kontrak yang dihias dengan makro #[near_bindgen] yang didefinisikan oleh NEAR SDK memiliki beberapa atribut visibilitas sebagai berikut:
Cara lain untuk mengatur metode sebagai internal adalah dengan mendefinisikan blok kode impl Contract yang tidak diberi tanda #[near_bindgen].
Untuk fungsi callback, harus diatur sebagai atribut public agar dapat dipanggil melalui function call. Selain itu, perlu dipastikan bahwa fungsi callback hanya dapat dipanggil oleh kontrak itu sendiri, dapat menggunakan makro #[private].
2. Kontrol Akses Fungsi Privilege ( Mekanisme Daftar Putih )
Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik. Beberapa fungsi istimewa (seperti inisialisasi kontrak, membuka/menangguhkan, transfer terpusat, dll.) hanya dapat dipanggil oleh pemilik kontrak (owner).
Dapat mengimplementasikan Trait kustom untuk mengontrol akses fungsi istimewa, memeriksa apakah pemanggil transaksi adalah pemilik kontrak:
karat pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }
Berdasarkan prinsip ini, Anda dapat mengatur beberapa pengguna atau beberapa daftar putih dalam daftar putih dengan menyesuaikan trait yang lebih kompleks, untuk mewujudkan kontrol akses grup yang lebih rinci.
3. Metode Kontrol Akses Lebih Lanjut
Metode kontrol akses lainnya dalam kontrak pintar Rust termasuk:
Konten ini akan dijelaskan secara rinci dalam seri catatan pengembangan smart contract yang akan datang.