Keamanan smart contract Rust: Memahami lebih dalam tentang kontrol akses dan manajemen izin

robot
Pembuatan abstrak sedang berlangsung

Rust smart contract pengembangan jurnal (7) Keamanan kontrak dalam kontrol akses

Artikel ini akan memperkenalkan kontrol akses dalam smart contract Rust dari dua sudut pandang:

  1. Visibilitas akses/panggilan metode (fungsi) kontrak
  2. Kontrol akses fungsi hak istimewa/pembagian tanggung jawab

1. Visibilitas Fungsi (Metode) Kontrak

Kontrol visibilitas fungsi kontrak sangat penting untuk melindungi bagian-bagian kunci dari akses atau manipulasi yang tidak disengaja. Sebagai contoh, insiden keamanan di bursa Bancor Network pada 18 Juni 2020 terjadi karena kesalahan pengaturan hak akses fungsi kunci kontrak.

Dalam kontrak pintar Rust, ada beberapa jenis visibilitas fungsi:

  • pub fn: Menunjukkan bahwa metode ini bersifat publik, merupakan bagian dari antarmuka kontrak, dan dapat dipanggil dari luar kontrak.
  • fn: Jika tidak secara eksplisit menyebutkan pub, maka fungsi tersebut tidak dapat dipanggil langsung dari luar kontrak, hanya dapat dipanggil di dalam kontrak.
  • pub(crate) fn: Batasi metode agar hanya dapat dipanggil dalam lingkup crate.

Cara lain untuk mengatur metode sebagai internal adalah dengan mendefinisikannya di dalam blok kode impl Contract yang tidak diberi modifikasi #[near_bindgen].

Untuk fungsi callback, harus diatur sebagai atribut publik, tetapi perlu dipastikan bahwa hanya kontrak itu sendiri yang dapat memanggilnya. Anda dapat menggunakan makro #[private] untuk mencapai hal ini.

2. Kontrol Akses Fungsi Privilege ( Mekanisme Daftar Putih )

Selain visibilitas fungsi, perlu juga membangun mekanisme daftar putih kontrol akses yang lengkap dari perspektif semantik. Beberapa fungsi privilese ( seperti inisialisasi kontrak, mengaktifkan/menonaktifkan, dan lain-lain ) hanya dapat dipanggil oleh pemilik kontrak.

Dapat mewujudkan Trait kustom untuk melakukan kontrol akses, memeriksa apakah pemanggil 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, dapat diatur beberapa pengguna atau beberapa daftar putih, untuk mewujudkan kontrol akses grup yang lebih rinci.

3. Metode Kontrol Akses yang Lebih Banyak

Metode kontrol akses lainnya dalam kontrak pintar Rust termasuk:

  • Kontrol waktu pemanggilan kontrak
  • Mekanisme panggilan multisignature pada fungsi kontrak
  • Pemerintahan(DAO) yang diimplementasikan

Konten ini akan dijelaskan secara rinci dalam artikel selanjutnya.

GET0.11%
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
  • 2
  • Posting ulang
  • Bagikan
Komentar
0/400
PumpBeforeRugvip
· 08-09 06:44
Kecelakaan Bancor itu juga karena izin yang tidak diatur dengan baik, kan?
Lihat AsliBalas0
OffchainOraclevip
· 08-09 06:32
Kecelakaan Bancor ini harus dijadikan peringatan yang dicontohkan di buku teks.
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)