Безпека смартконтрактів Rust: детальний аналіз контролю доступу та видимості функцій

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

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

У цій статті ми представимо контроль дозволів у смарт-контрактах Rust з двох аспектів:

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

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

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

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

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

Крім того, методи, визначені в impl блоках, які не прикрашені #[near_bindgen], є внутрішніми.

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

Варто зазначити, що Rust за замовчуванням всі елементи є приватними, за винятком елементів у pub trait та pub enum.

!

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

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

У Rust можна реалізувати за допомогою налаштованих трейтов:

іржа публічний трейд Власний { 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); }

Таким чином, можна реалізувати основний контроль прав owner. Це можна далі розширити до мульти-користувацького білого списку або мульти-групового білого списку, щоб реалізувати більш тонкий контроль доступу.

!

!

!

!

!

!

!

!

!

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
ser_we_are_ngmivip
· 2год тому
Так важко зрозуміти, пішов, пішов.
Переглянути оригіналвідповісти на0
NFT_Therapyvip
· 07-17 01:06
Контроль доступу обов'язковий! Інакше контракт можуть зламати, і це буде кінець.
Переглянути оригіналвідповісти на0
PonziDetectorvip
· 07-17 01:05
Rust yyds найжорсткіший
Переглянути оригіналвідповісти на0
MetaMuskRatvip
· 07-17 01:02
Знову бачу когось із управлінськими правами, втікаю, втікаю
Переглянути оригіналвідповісти на0
ser_we_are_earlyvip
· 07-17 00:46
Просто і жорстко - це просто додати контроль доступу.
Переглянути оригіналвідповісти на0
MemeEchoervip
· 07-17 00:40
Дивлячись на це, хочеться спати. Чи справді хтось це вивчав?
Переглянути оригіналвідповісти на0
  • Закріпити