Sécurité des smart contracts Rust : compréhension approfondie du contrôle d'accès et de la gestion des permissions

robot
Création du résumé en cours

Rust smart contracts développement journal (7) sécurité des contrats : contrôle d'accès

Cet article présentera le contrôle d'accès dans les smart contracts Rust sous deux angles :

  1. Visibilité d'accès/appel des méthodes (fonctions) de contrat
  2. Contrôle d'accès des fonctions privilégiées / Répartition des responsabilités

1. Visibilité des fonctions (méthodes) de contrat

Le contrôle de la visibilité des fonctions de contrat est essentiel pour protéger les parties critiques contre un accès ou une manipulation accidentels. Prenons l'exemple de l'incident de sécurité de l'échange Bancor Network du 18 juin 2020, qui a été causé par une mauvaise configuration des droits d'accès aux fonctions clés du contrat.

Dans les smart contracts Rust, il existe plusieurs types de visibilité des fonctions :

  • pub fn : indique que cette méthode est publique, fait partie de l'interface du contrat et peut être appelée depuis l'extérieur du contrat.
  • fn: Si pub n'est pas explicitement indiqué, cela signifie que cette fonction ne peut pas être appelée directement depuis l'extérieur du contrat, mais uniquement à l'intérieur du contrat.
  • pub(crate) fn: Limiter l'appel de la méthode à l'intérieur de la portée du crate.

Une autre façon de définir la méthode comme interne est de la définir dans un bloc de code impl Contract qui n'est pas annoté par #[near_bindgen].

Pour les fonctions de rappel, elles doivent être définies comme des propriétés publiques, mais il est nécessaire de s'assurer qu'elles ne peuvent être appelées que par le contrat lui-même. Vous pouvez utiliser le macro #[private] pour réaliser cela.

2. Contrôle d'accès des fonctions privilégiées(mécanisme de liste blanche)

En plus de la visibilité des fonctions, il est également nécessaire d'établir un mécanisme complet de liste blanche de contrôle d'accès au niveau sémantique. Certaines fonctions privilégiées ( telles que l'initialisation du contrat, l'activation/désactivation, etc. ) ne peuvent être appelées que par le propriétaire du contrat.

Vous pouvez créer des Trait personnalisés pour gérer le contrôle d'accès, vérifiant si l'appelant est le propriétaire du contrat :

rouille pub trait Ownable { fn assert_owner(&self) { assert_eq!(env::predecessor_account_id(), self.get_owner()); } AccountId; fn set_owner(&mut self, owner: AccountId); }

Sur la base de ce principe, il est possible de définir plusieurs utilisateurs ou plusieurs listes blanches pour réaliser un contrôle d'accès par groupes plus précis.

3. Méthodes supplémentaires de contrôle d'accès

D'autres méthodes de contrôle d'accès dans les smart contracts Rust incluent :

  • Contrôle du moment d'appel des smart contracts
  • Mécanisme d'appel multi-signatures des fonctions de contrat
  • Gouvernance(DAO) de réalisation

Ces contenus seront détaillés dans les articles suivants.

GET0.11%
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • 2
  • Reposter
  • Partager
Commentaire
0/400
PumpBeforeRugvip
· 08-09 06:44
La fois où Bancor a échoué, c'était aussi à cause de permissions mal configurées, n'est-ce pas ?
Voir l'originalRépondre0
OffchainOraclevip
· 08-09 06:32
Eh bien, l'incident Bancor doit être utilisé comme un avertissement de type manuel.
Voir l'originalRépondre0
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)