Практика безопасности смарт-контрактов на Rust: Подробное рассмотрение видимости функций и контроля доступа

Rust смарт-контракты养成日记(7)合约安全之计算精度

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

  • Доступ/видимость вызова методов смарт-контрактов
  • Контроль доступа к функциям привилегий/распределение обязанностей и прав

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

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

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

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

Другой способ установки внутренних методов заключается в определении независимого блока кода impl Contract без использования модификатора #[near_bindgen].

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

По умолчанию в Rust все элементы являются private, но элементы в trait и enum по умолчанию являются public.

!

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

Кроме настройки видимости функций, необходимо установить механизм белого списка для контроля доступа. Подобно модификатору onlyOwner в Solidity, можно определить привилегированные функции, которые могут вызывать только владелец.

В Rust можно реализовать аналогичный трейт 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) механизм

Подробности смотрите в следующих публикациях.

!

!

!

!

!

!

!

!

GET-0.17%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 4
  • Репост
  • Поделиться
комментарий
0/400
EthMaximalistvip
· 08-14 01:11
Ахха, это же та самая уязвимость, из-за которой Bancor потерпел неудачу в те годы?
Посмотреть ОригиналОтветить0
HalfBuddhaMoneyvip
· 08-12 19:17
Уху, снова время писать баги.
Посмотреть ОригиналОтветить0
GhostAddressMinervip
· 08-12 19:17
Этот контрактный уязвимость просто примитивна, я случайно последовал за 276 кошельками хакеров и давно заметил, что с деньгами, идущими через bancor, что-то не так.
Посмотреть ОригиналОтветить0
CoconutWaterBoyvip
· 08-12 18:50
Занимаюсь контрактами уже несколько лет, pub fn тоже терпел неудачи много раз.
Посмотреть ОригиналОтветить0
  • Закрепить