Rust smart contract diary (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua sudut pandang:
Visibilitas metode kontrak
Kontrol akses fungsi istimewa
1. Visibilitas Fungsi Kontrak
Pengendalian visibilitas fungsi kontrak sangat penting untuk melindungi fungsi-fungsi kunci. Sebagai contoh, insiden keamanan di bursa Bancor Network pada Juni 2020, karena salah mengatur fungsi transfer kunci menjadi public, yang mengakibatkan risiko terhadap aset pengguna.
Dalam smart contract Rust, ada beberapa jenis visibilitas fungsi:
pub fn: fungsi publik, dapat dipanggil dari luar
fn: fungsi internal, hanya dapat dipanggil di dalam kontrak
pub(crate) fn: batasi panggilan di dalam crate
Selain itu, mendefinisikan fungsi di dalam blok impl yang tidak dihiasi dengan #[near_bindgen] juga dapat menjadikannya sebagai fungsi internal.
Untuk fungsi callback, harus diatur sebagai publik tetapi sekaligus memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Dapat menggunakan makro #[private] untuk mencapai fungsi ini.
Perlu dicatat bahwa visibilitas default di Rust adalah private, berbeda dengan public default di beberapa versi Solidity. Pengecualian adalah item dalam pub trait dan pub enum yang secara default adalah public.
2. Kontrol Akses Fungsi Hak Istimewa
Selain visibilitas fungsi, perlu untuk membangun mekanisme daftar putih untuk mengontrol akses ke fungsi istimewa. Mirip dengan modifier onlyOwner di Solidity, kita bisa mengimplementasikan trait Ownable:
Menggunakan trait ini dapat membatasi hanya pemilik yang dapat memanggil fungsi privilese tertentu. Berdasarkan prinsip ini, whitelist yang lebih kompleks dapat diatur untuk mencapai kontrol akses yang lebih rinci.
3. Metode Kontrol Akses Lainnya
Anda juga dapat mempertimbangkan kontrol waktu pemanggilan kontrak, mekanisme pemanggilan multi-tanda tangan, tata kelola DAO, dan lebih banyak metode kontrol akses, yang akan dijelaskan secara rinci dalam artikel berikutnya.
Lihat Asli
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
7 Suka
Hadiah
7
7
Bagikan
Komentar
0/400
LootboxPhobia
· 18jam yang lalu
Kartu, kartu, saya tidak bisa belajar smart contract.
Lihat AsliBalas0
GasOptimizer
· 18jam yang lalu
Visualisasi konsumsi gas multi-tanda tangan adalah topik besar lainnya.
Lihat AsliBalas0
BridgeJumper
· 18jam yang lalu
Kode sudah aman, kan? Tetap saja disuntik.
Lihat AsliBalas0
UncleLiquidation
· 18jam yang lalu
Keamanan multi-tanda tangan masih baik.
Lihat AsliBalas0
UncleWhale
· 18jam yang lalu
Keamanan tetap harus dikelola dengan serius.
Lihat AsliBalas0
BankruptcyArtist
· 18jam yang lalu
Apa kegunaan multisignature jika tetap bisa dieksploitasi?
Rust smart contract keamanan lanjutan: praktik kontrol akses dan manajemen akses
Rust smart contract diary (7) Keamanan kontrak dan kontrol akses
Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua sudut pandang:
1. Visibilitas Fungsi Kontrak
Pengendalian visibilitas fungsi kontrak sangat penting untuk melindungi fungsi-fungsi kunci. Sebagai contoh, insiden keamanan di bursa Bancor Network pada Juni 2020, karena salah mengatur fungsi transfer kunci menjadi public, yang mengakibatkan risiko terhadap aset pengguna.
Dalam smart contract Rust, ada beberapa jenis visibilitas fungsi:
Selain itu, mendefinisikan fungsi di dalam blok impl yang tidak dihiasi dengan #[near_bindgen] juga dapat menjadikannya sebagai fungsi internal.
Untuk fungsi callback, harus diatur sebagai publik tetapi sekaligus memastikan hanya dapat dipanggil oleh kontrak itu sendiri. Dapat menggunakan makro #[private] untuk mencapai fungsi ini.
Perlu dicatat bahwa visibilitas default di Rust adalah private, berbeda dengan public default di beberapa versi Solidity. Pengecualian adalah item dalam pub trait dan pub enum yang secara default adalah public.
2. Kontrol Akses Fungsi Hak Istimewa
Selain visibilitas fungsi, perlu untuk membangun mekanisme daftar putih untuk mengontrol akses ke fungsi istimewa. Mirip dengan modifier onlyOwner di Solidity, kita bisa mengimplementasikan trait Ownable:
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); }
Menggunakan trait ini dapat membatasi hanya pemilik yang dapat memanggil fungsi privilese tertentu. Berdasarkan prinsip ini, whitelist yang lebih kompleks dapat diatur untuk mencapai kontrol akses yang lebih rinci.
3. Metode Kontrol Akses Lainnya
Anda juga dapat mempertimbangkan kontrol waktu pemanggilan kontrak, mekanisme pemanggilan multi-tanda tangan, tata kelola DAO, dan lebih banyak metode kontrol akses, yang akan dijelaskan secara rinci dalam artikel berikutnya.