Keamanan kontrak pintar Rust: Praktik terbaik untuk visibilitas fungsi dan kontrol akses

robot
Pembuatan abstrak sedang berlangsung

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

Artikel ini akan memperkenalkan dua aspek terkait kontrol akses dalam smart contract Rust:

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

1. Visibilitas Fungsi (Metode) Kontrak

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

Sebagai contoh bursa Bancor Network, pada 18 Juni 2020 pernah terjadi sebuah insiden keamanan yang disebabkan oleh kesalahan pengaturan hak akses fungsi kunci kontrak. Kontrak tersebut ditulis dalam bahasa Solidity, dan visibilitas fungsi kontrak dibagi menjadi public/external dan private/internal. Yang pertama memungkinkan fungsi kontrak dipanggil oleh pemanggil eksternal, dan dapat dianggap sebagai bagian dari antarmuka kontrak.

Jaringan Bancor, saat memperbaiki celah keamanan tertentu, secara tidak sengaja mengatur beberapa fungsi transfer kunci dalam kontrak menjadi atribut public, yang memungkinkan siapa pun untuk memanggil fungsi-fungsi ini dari luar kontrak untuk melakukan operasi transfer. Celah ini membuat aset pengguna senilai 590.000 dolar AS menghadapi risiko serius.

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

  • pub fn: Menunjukkan bahwa metode kontrak ini adalah publik, merupakan bagian dari antarmuka kontrak, dan siapa pun dapat memanggilnya dari luar kontrak.
  • fn: Jika pub tidak dinyatakan secara eksplisit, itu berarti fungsi tersebut tidak dapat dipanggil langsung dari luar kontrak, hanya dapat dipanggil dari dalam kontrak oleh fungsi lain.
  • pub(crate) fn: Setara dengan pub(in crate), mirip dengan fn, membatasi metode kontrak agar hanya dapat dipanggil dalam lingkup crate.

Cara lain untuk mengatur metode kontrak sebagai internal adalah dengan mendefinisikan blok kode impl Contract yang terpisah dalam kontrak, yang implementasinya tidak diberi tanda #[near_bindgen].

Untuk fungsi callback, definisinya harus diatur sebagai atribut publik, tetapi pada saat yang sama perlu memastikan bahwa hanya dapat dipanggil oleh kontrak itu sendiri. NEAR SDK menyediakan makro #[private] untuk mewujudkan fungsi ini.

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

2. Kontrol Akses Fungsi Privilege (Mekanisme Daftar Putih)

Selain visibilitas fungsi, perlu membangun mekanisme daftar putih kontrol akses yang lengkap dari sudut pandang semantik kontrak. Beberapa fungsi istimewa, seperti inisialisasi kontrak, mengaktifkan/menghentikan, dan transfer seragam, biasanya hanya dapat dipanggil oleh pemilik kontrak (owner).

Fungsi-fungsi khusus ini harus diatur sebagai atribut publik agar dapat dipanggil dari luar, tetapi pada saat yang sama perlu mendefinisikan aturan kontrol akses untuk memastikan hanya pengguna yang memenuhi syarat yang dapat melaksanakan sepenuhnya.

Dalam kontrak pintar Rust, fungsi mirip modifier Solidity dapat diimplementasikan dengan menyesuaikan Trait untuk mengontrol akses ke fungsi-fungsi istimewa:

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 mengimplementasikan kontrol akses pada fungsi-fungsi istimewa dalam kontrak, yang mengharuskan pemanggil transaksi menjadi pemilik kontrak. Berdasarkan prinsip ini, Anda dapat mengatur kontrol akses grup yang lebih halus dengan mengcustom modifier atau trait yang lebih kompleks untuk menetapkan beberapa pengguna atau beberapa daftar putih.

3. Metode Kontrol Akses Lainnya

Selain metode yang disebutkan di atas, dalam smart contract Rust juga terdapat metode kontrol akses lainnya, seperti kontrol waktu pemanggilan kontrak, mekanisme panggilan multi-tanda tangan untuk fungsi kontrak, implementasi tata kelola (DAO), dan lain-lain. Konten ini akan dijelaskan secara rinci dalam artikel selanjutnya dari seri jurnal pengembangan smart contract ini.

BNT-0.17%
GET2.67%
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
  • 3
  • Bagikan
Komentar
0/400
Rugpull幸存者vip
· 12jam yang lalu
Ini adalah penipuan baru dalam Allowlist, kan?
Lihat AsliBalas0
RektHuntervip
· 12jam yang lalu
Pemula rust wajib lihat! Andalan~
Lihat AsliBalas0
MetaLord420vip
· 12jam yang lalu
Hai, Allowlist juga bisa di-hack, kan~
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)