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 akses/panggilan metode (fungsi) kontrak
  2. 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:

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:

  • 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.

NEAR-1.38%
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
  • 4
  • Bagikan
Komentar
0/400
not_your_keysvip
· 1jam yang lalu
Saya masih tidak bisa memahami kerentanan Bancor itu sampai sekarang.
Lihat AsliBalas0
SigmaBrainvip
· 20jam yang lalu
Memang pelajaran dari Bancor sangat mengena.
Lihat AsliBalas0
NewPumpamentalsvip
· 20jam yang lalu
Lagi membahas kontrol izin, kenapa tidak belajar dari pelajaran Bancor?
Lihat AsliBalas0
ChainWallflowervip
· 20jam yang lalu
Masalah izin ini sudah jelas~
Lihat AsliBalas0
  • Sematkan
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)