Rust смартконтракти безпеки: практика контролю доступу та управління доступом

robot
Генерація анотацій у процесі

Rust смартконтракти养成日记(7)合约安全之权限控制

Ця стаття розгляне контроль доступу в смартконтрактах Rust з двох точок зору:

  1. Видимість методів смартконтрактів
  2. Контроль доступу до функцій привілейованих

1. Видимість функцій смартконтрактів

Контроль видимості функцій контракту є вирішальним для захисту ключових функцій. Як приклад, безпековий інцидент на біржі Bancor Network у червні 2020 року стався через те, що критично важливу функцію переказу було помилково встановлено як public, що призвело до ризику для активів користувачів.

У смартконтрактах Rust існує кілька видів видимості функцій:

  • pub fn: публічна функція, доступна для виклику ззовні
  • fn: внутрішня функція, може бути викликана тільки всередині контракту
  • pub(crate) fn: обмежити виклики всередині crate

Крім того, визначення функції в блоці impl, який не має модифікатора #[near_bindgen], також може зробити її внутрішньою функцією.

Для функцій зворотного виклику потрібно встановити їх як public, але при цьому забезпечити, щоб їх міг викликати лише сам контракт. Для реалізації цієї функції можна використовувати макрос #[private].

Слід звернути увагу, що за замовчуванням в Rust видимість є приватною, що відрізняється від деяких версій Solidity, де за замовчуванням є публічною. Виключенням є те, що елементи в pub trait та pub enum за замовчуванням є публічними.

!

2. Контроль доступу до функцій привілеїв

Окрім видимості функцій, потрібно також встановити механізм білого списку для контролю доступу до привілейованих функцій. Подібно до модифікатора onlyOwner у Solidity, можна реалізувати trait Ownable:

іржа паб риса Власна { fn assert_owner(&self) { assert_eq!(env::p redecessor_account_id(), self.get_ owner()); } fn get_owner(&self) -> AccountId; fn set_owner(&mut self, власник: AccountId); }

Використовуючи цей трейт, можна обмежити доступ до деяких привілейованих функцій тільки для власника. На основі цього принципу можна налаштувати більш складний білий список для реалізації детального контролю доступу.

!

3. Інші методи контролю доступу

Також можна розглянути контроль часу виклику контракту, механізм багатостороннього підписання, управління DAO та інші методи контролю доступу, які будуть детально описані в наступних статтях.

!

!

!

!

!

!

!

!

Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
LootboxPhobiavip
· 11год тому
Зависло, зависло, не можу вивчити смартконтракти.
Переглянути оригіналвідповісти на0
GasOptimizervip
· 11год тому
Візуалізація витрат газу на мультипідпис є ще однією великою темою.
Переглянути оригіналвідповісти на0
BridgeJumpervip
· 11год тому
Код вже в безпеці, але все ще піддається ін'єкціям.
Переглянути оригіналвідповісти на0
UncleLiquidationvip
· 11год тому
Безпека мультипідпису доволі непогана
Переглянути оригіналвідповісти на0
UncleWhalevip
· 12год тому
Безпека все ж треба серйозно дбати.
Переглянути оригіналвідповісти на0
BankruptcyArtistvip
· 12год тому
Яка користь від мультипідпису, якщо є вразливості, їх все одно можна експлуатувати.
Переглянути оригіналвідповісти на0
MEVSandwichvip
· 12год тому
Добра робота! Мультипідпис виглядає безпечним~
Переглянути оригіналвідповісти на0
  • Закріпити