Keamanan smart contract Rust: Penjelasan mendetail tentang kontrol akses dan manajemen akses

robot
Pembuatan abstrak sedang berlangsung

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 Hak Istimewa/Pembagian Tanggung Jawab

1. Visibilitas Fungsi (Metode) Kontrak

Saat menulis smart contract, dengan menentukan visibilitas fungsi kontrak, kita dapat mengontrol hak akses fungsi, sehingga melindungi bagian penting dari kontrak dari akses atau manipulasi yang tidak sengaja.

Sebagai contoh dari bursa Bancor Network, bursa tersebut pernah mengalami sebuah insiden keamanan aset pada 18 Juni 2020 akibat kesalahan pengaturan kontrol akses fungsi kunci kontrak. Kontrak tersebut ditulis dalam bahasa Solidity, di mana visibilitas fungsi kontrak dibagi menjadi dua jenis: public/external dan private/internal. Yang pertama memungkinkan fungsi kontrak dipanggil oleh pemanggil eksternal, dapat dianggap sebagai bagian dari antarmuka kontrak.

Ketika Bancor Network memperbaiki suatu celah keamanan, mereka secara tidak sengaja mengatur beberapa fungsi transfer kunci dalam kontrak menjadi atribut public, sehingga siapa pun dapat memanggil fungsi ini dari luar kontrak untuk melakukan operasi transfer. Celah kunci ini membuat aset pengguna senilai 590.000 dolar mereka menghadapi risiko serius.

Dalam kontrak pintar Rust, penting juga untuk memperhatikan kontrol visibilitas fungsi kontrak. Makro #[near_bindgen] yang ditentukan oleh NEAR SDK dapat digunakan untuk memodifikasi fungsi kontrak pintar Rust, dengan beberapa atribut visibilitas yang berbeda sebagai berikut:

  • pub fn: Menunjukkan bahwa metode ini bersifat publik, merupakan bagian dari antarmuka kontrak, dan dapat dipanggil dari luar.
  • fn: Tidak secara eksplisit menyatakan pub, yang berarti tidak dapat dipanggil secara langsung dari luar kontrak, hanya dapat dipanggil di dalam kontrak.
  • pub(crate) fn: Batasi metode untuk dipanggil dalam lingkup internal crate.

Cara lain untuk mengatur metode kontrak menjadi internal adalah dengan mendefinisikan blok kode impl Contract yang independen dan tidak diberi tanda #[near_bindgen] di dalam kontrak.

Untuk fungsi callback (Callbacks), saat mendefinisikannya harus diatur sebagai atribut publik agar dapat dipanggil melalui function call. Selain itu, perlu memastikan bahwa fungsi callback tidak dapat dipanggil sembarangan oleh orang lain, yaitu pemanggil harus merupakan kontrak itu sendiri. NEAR SDK menyediakan #[private] macro untuk mewujudkan fungsi ini.

Perlu dicatat bahwa dalam bahasa Rust, semua konten secara default adalah private, kecuali subproyek dalam pub Trait dan variabel Enum dalam pub Enum yang secara default bersifat public.

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 kontrak. Beberapa fungsi istimewa ( seperti inisialisasi kontrak, mengaktifkan/menghentikan, dan transfer bersatu ) hanya dapat dipanggil oleh pemilik kontrak ( owner ), fungsi-fungsi ini biasanya disebut sebagai fungsi "hanya pemilik".

Meskipun fungsi kunci ini harus diatur sebagai atribut publik agar dapat dipanggil dari luar, akses kontrol dapat ditentukan untuknya, hanya jika memenuhi aturan yang sesuai dapat dieksekusi secara lengkap. Misalnya, dapat diimplementasikan Trait kustom seperti berikut:

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); }

Dengan menggunakan trait ini, akses kontrol terhadap fungsi-fungsi istimewa dalam kontrak dapat diimplementasikan, yang mengharuskan pemanggil untuk menjadi pemilik kontrak. Berdasarkan prinsip ini, Anda dapat mengatur beberapa pengguna atau daftar putih yang lebih kompleks melalui modifier atau trait yang disesuaikan untuk mencapai kontrol akses grup yang lebih rinci.

BNT1.59%
GET-0.8%
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
  • 6
  • Bagikan
Komentar
0/400
ContractTestervip
· 5jam yang lalu
Sekali lagi melihat solidity gagal, Rust adalah yang terbaik di dunia.
Lihat AsliBalas0
ApeEscapeArtistvip
· 6jam yang lalu
Rust adalah pelajaran berharga yang penuh darah dan air mata
Lihat AsliBalas0
AllTalkLongTradervip
· 6jam yang lalu
Mengapa manajemen hak masih dibuat begitu rumit?
Lihat AsliBalas0
defi_detectivevip
· 6jam yang lalu
Bug Bancor ini memang sangat sepele, saya bahkan tidak ingin membicarakannya.
Lihat AsliBalas0
GasWastingMaximalistvip
· 6jam yang lalu
Saya sudah pernah terjebak di lubang ini, langsung pecah.
Lihat AsliBalas0
CryptoAdventurervip
· 6jam yang lalu
Kembali ada pertukaran yang mengalami masalah? Manajemen risiko selalu menjadi mesin pemungutan pajak untuk IQ~
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)