Keamanan smart contract Rust: Panduan lengkap kontrol akses

robot
Pembuatan abstrak sedang berlangsung

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

Artikel ini akan memperkenalkan konten terkait pengendalian akses dalam smart contract Rust dari dua sudut pandang:

  • Visibilitas akses/panggilan metode (fungsi) kontrak
  • Kontrol akses fungsi privilese/pembagian tanggung jawab

1. Visibilitas Fungsi (Metode) Kontrak

Saat menulis smart contract, dengan menentukan visibilitas fungsi kontrak, Anda dapat mengontrol hak akses pemanggilan fungsi, melindungi bagian penting dari kontrak agar tidak diakses atau dikendalikan sembarangan.

Sebagai contoh, pada bursa Bancor Network, terjadi insiden keamanan aset pada 18 Juni 2020 akibat kesalahan pengaturan kontrol akses fungsi kunci kontrak. Kontrak tersebut ditulis dalam bahasa Solidity, dan visibilitas fungsi kontrak dibagi menjadi dua jenis: public/external dan private/internal. Yang pertama memungkinkan fungsi kontrak dipanggil oleh pemanggil eksternal.

Saat memperbaiki celah keamanan tertentu, karena kelalaian, beberapa fungsi transfer kunci dalam kontrak secara tidak sengaja diatur menjadi atribut public, yang memungkinkan siapa pun untuk memanggil fungsi-fungsi ini dari luar kontrak untuk melakukan operasi transfer, sehingga aset pengguna senilai 590.000 dolar menghadapi risiko serius.

Dalam smart contract Rust, kontrol visibilitas fungsi kontrak juga harus diperhatikan. Fungsi smart contract Rust yang dimodifikasi dengan makro #[near_bindgen] yang didefinisikan oleh NEAR SDK memiliki beberapa atribut visibilitas yang berbeda:

  • pub fn: Menunjukkan bahwa metode ini bersifat publik, merupakan bagian dari antarmuka kontrak, dan dapat dipanggil dari luar kontrak.
  • fn: Jika tidak secara eksplisit dinyatakan pub, itu berarti tidak dapat dipanggil secara langsung dari luar kontrak, hanya dapat dipanggil di dalam kontrak oleh fungsi lain.
  • pub(crate) fn: setara dengan pub(in crate), membatasi metode untuk dipanggil dalam cakupan internal crate.

Cara lain untuk mengatur metode kontrak menjadi internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah dalam kontrak, di mana implementasi tersebut tidak dihiasi dengan #[near_bindgen].

Untuk fungsi callback (Callbacks), definisinya harus diatur sebagai atribut publik, tetapi perlu memastikan bahwa hanya kontrak itu sendiri yang dapat memanggilnya. NEAR SDK menyediakan makro #[private] untuk mencapai fungsi ini.

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

2. Kontrol Akses Fungsi Istimewa ( Mekanisme Daftar Putih )

Selain kontrol visibilitas fungsi, perlu juga untuk membangun mekanisme daftar putih kontrol akses yang lengkap dari sisi semantik kontrak. Beberapa fungsi istimewa ( seperti inisialisasi kontrak, membuka/menghentikan, dan transfer seragam ) hanya dapat dipanggil oleh pemilik kontrak ( owner ), fungsi-fungsi ini biasanya disebut sebagai fungsi "hanya pemilik".

Meskipun fungsi kunci ini harus disetel sebagai atribut publik, aturan kontrol akses dapat didefinisikan untuknya, hanya jika aturan yang sesuai dipenuhi, maka dapat dieksekusi sepenuhnya. Dalam kontrak pintar Rust, Trait kustom yang mirip dengan modifier onlyOwner di Solidity dapat diimplementasikan:

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, di mana pemanggil harus merupakan pemilik kontrak. Berdasarkan prinsip ini, lebih banyak pengguna dapat ditetapkan dalam daftar putih melalui modifikasi atau trait yang lebih kompleks yang disesuaikan, atau beberapa daftar putih dapat ditetapkan untuk mencapai kontrol akses kelompok yang lebih rinci.

3. Metode kontrol akses lebih lanjut

Metode kontrol akses lainnya dalam kontrak pintar Rust termasuk:

  • Kontrol waktu pemanggilan kontrak
  • Mekanisme panggilan multisignature untuk fungsi kontrak
  • Pemerintahan(DAO) dalam pelaksanaannya

Konten ini akan diperkenalkan dalam artikel berikutnya dari seri buku harian pengembangan smart contract ini.

GET0.23%
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
CompoundPersonalityvip
· 23jam yang lalu
Aku harus kembali berjuang cerdas dengan izin.
Lihat AsliBalas0
MEVSupportGroupvip
· 23jam yang lalu
Kesalahan izin, merugi. Berkumpul untuk menghangatkan diri.
Lihat AsliBalas0
MetaMaximalistvip
· 23jam yang lalu
ugh, kesalahan pemula tingkat bancor lagi... inilah mengapa kita perlu verifikasi formal untuk semua penerapan protokol jujur saja
Lihat AsliBalas0
TokenomicsTherapistvip
· 23jam yang lalu
Jangan bilang tentang Bancor, saya masih ingat saat itu sangat kacau.
Lihat AsliBalas0
TokenEconomistvip
· 23jam yang lalu
biarkan saya jelaskan - kontrol akses adalah benar-benar abc dari keamanan kontrak smh
Lihat AsliBalas0
Layer2Arbitrageurvip
· 23jam yang lalu
lmao bayangkan menulis kontrak rust tanpa kontrol akses yang tepat... ngmi serius
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)