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 и другие методы контроля доступа. Эти аспекты будут подробно рассмотрены в последующих статьях.

!

!

!

!

!

!

!

!

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 10
  • Репост
  • Поделиться
комментарий
0/400
Anon32942vip
· 07-14 23:24
Этот код немного труден для понимания.
Посмотреть ОригиналОтветить0
GasFeeCriervip
· 07-14 20:16
Насколько безопасна эта безопасность?
Посмотреть ОригиналОтветить0
MeaninglessApevip
· 07-14 14:35
Это тоже нужно делать? Уже написали на Rust.
Посмотреть ОригиналОтветить0
LootboxPhobiavip
· 07-12 09:38
Завис, завис, не могу учить смарт-контракты.
Посмотреть ОригиналОтветить0
GasOptimizervip
· 07-12 09:38
Визуализация потребления газа для мультиподписей — это еще одна большая тема.
Посмотреть ОригиналОтветить0
BridgeJumpervip
· 07-12 09:37
Код теперь безопасен, но все равно подвергся инъекции.
Посмотреть ОригиналОтветить0
UncleLiquidationvip
· 07-12 09:37
Безопасность мультиподписей вполне хороша.
Посмотреть ОригиналОтветить0
UncleWhalevip
· 07-12 09:30
Безопасностью нужно заниматься серьезно.
Посмотреть ОригиналОтветить0
BankruptcyArtistvip
· 07-12 09:22
Какова польза многофакторной подписи, если все равно есть уязвимости?
Посмотреть ОригиналОтветить0
MEVSandwichvip
· 07-12 09:14
Хорошо! Мультиподпись выглядит безопасно~
Посмотреть ОригиналОтветить0
Подробнее
  • Закрепить