Безопасность смарт-контрактов Rust: глубокое понимание контроля доступа и управления правами

robot
Генерация тезисов в процессе

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

В этой статье будет рассмотрен контроль доступа в смарт-контрактах Rust с двух точек зрения:

  1. Видимость доступа/вызова методов (функций) смарт-контрактов
  2. Контроль доступа к привилегированным функциям / Распределение полномочий и ответственности

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

Контроль видимости функций смарт-контрактов имеет решающее значение для защиты ключевых частей от случайного доступа или манипуляций. В качестве примера можно привести инцидент с безопасностью биржи Bancor Network 18 июня 2020 года, который произошел из-за неправильной настройки прав доступа к ключевым функциям контракта.

В смарт-контрактах на Rust существует несколько видов видимости функций:

  • pub fn: обозначает, что этот метод является публичным, является частью интерфейса контракта и может быть вызван извне контракта.
  • fn: Если не указано явно pub, это означает, что данная функция не может быть вызвана напрямую из внешнего контракта, она может быть вызвана только внутри контракта.
  • pub(crate) fn: Ограничить вызов метода внутри области видимости crate.

Другой способ установить метод как внутренний - это определить его в кодовом блоке impl Contract, который не помечен #[near_bindgen].

Что касается обратных вызовов, они должны быть установлены как публичные свойства, но необходимо убедиться, что они могут вызываться только самим контрактом. Для этого можно использовать макрос #[private].

!

2. Контроль доступа к привилегированным функциям(Механизм белого списка)

Кроме видимости функций, необходимо также установить полноценный механизм белого списка контроля доступа на семантическом уровне. Некоторые привилегированные функции (, такие как инициализация контракта, включение/приостановка и т.д. ) могут вызываться только владельцем контракта.

Можно реализовать пользовательский Trait для управления доступом, проверяя, является ли вызывающий стороной владельцем смарт-контракта:

ржавчина 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. Более методы контроля доступа

Другие методы контроля доступа в Rust смарт-контрактах также включают:

  • Контроль времени вызова смарт-контрактов
  • Механизм многофакторного вызова функций смарт-контрактов
  • Управление(DAO) реализации

Эти материалы будут подробно рассмотрены в последующих статьях.

!

!

!

!

!

!

!

!

GET6.04%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 2
  • Репост
  • Поделиться
комментарий
0/400
PumpBeforeRugvip
· 08-09 06:44
С той неудачей Bancor, наверное, тоже были проблемы с настройкой прав.
Посмотреть ОригиналОтветить0
OffchainOraclevip
· 08-09 06:32
Этот инцидент с Bancor должен служить учебным предупреждением.
Посмотреть ОригиналОтветить0
  • Закрепить