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
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.
10 Suka
Hadiah
10
10
Bagikan
Komentar
0/400
Anon32942
· 07-14 23:24
Kode ini agak sulit untuk dicerna.
Lihat AsliBalas0
GasFeeCrier
· 07-14 20:16
Seberapa aman sebenarnya keamanan ini?
Lihat AsliBalas0
MeaninglessApe
· 07-14 14:35
Ini juga harus dilakukannya? Sudah menulis Rust.
Lihat AsliBalas0
LootboxPhobia
· 07-12 09:38
Kartu, kartu, saya tidak bisa belajar smart contract.
Lihat AsliBalas0
GasOptimizer
· 07-12 09:38
Visualisasi konsumsi gas multi-tanda tangan adalah topik besar lainnya.
Lihat AsliBalas0
BridgeJumper
· 07-12 09:37
Kode sudah aman, kan? Tetap saja disuntik.
Lihat AsliBalas0
UncleLiquidation
· 07-12 09:37
Keamanan multi-tanda tangan masih baik.
Lihat AsliBalas0
UncleWhale
· 07-12 09:30
Keamanan tetap harus dikelola dengan serius.
Lihat AsliBalas0
BankruptcyArtist
· 07-12 09:22
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.