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, можно реализовать трейт Ownable:

ржавчина pub 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
· 14ч назад
Завис, завис, не могу учить смарт-контракты.
Посмотреть ОригиналОтветить0
GasOptimizervip
· 14ч назад
Визуализация потребления газа для мультиподписей — это еще одна большая тема.
Посмотреть ОригиналОтветить0
BridgeJumpervip
· 14ч назад
Код теперь безопасен, но все равно подвергся инъекции.
Посмотреть ОригиналОтветить0
UncleLiquidationvip
· 14ч назад
Безопасность мультиподписей вполне хороша.
Посмотреть ОригиналОтветить0
UncleWhalevip
· 14ч назад
Безопасностью нужно заниматься серьезно.
Посмотреть ОригиналОтветить0
BankruptcyArtistvip
· 14ч назад
Какова польза многофакторной подписи, если все равно есть уязвимости?
Посмотреть ОригиналОтветить0
MEVSandwichvip
· 14ч назад
Хорошо! Мультиподпись выглядит безопасно~
Посмотреть ОригиналОтветить0
  • Закрепить