Sécurité des smart contracts en Rust : Détails sur le contrôle d'accès et la gestion des autorisations

robot
Création du résumé en cours

Journal de développement de contrats intelligents Rust (7) Sécurité des contrats : contrôle d'accès

Cet article présentera le contrôle des permissions dans les smart contracts Rust sous deux angles :

  1. La visibilité des méthodes de contrat
  2. Contrôle d'accès des fonctions privilèges

1. Visibilité des fonctions de contrat

Dans les smart contracts Rust, le contrôle de la visibilité des fonctions est très important. Le SDK NEAR définit les attributs de visibilité suivants avec le macro #[near_bindgen] :

  • pub fn: fonction publique, peut être appelée depuis l'extérieur du contrat
  • fn: fonction interne, ne peut être appelée que de l'intérieur du contrat
  • pub(crate) fn: limiter les appels à l'intérieur de crate

De plus, il est possible de définir des méthodes internes via un bloc Contract impl indépendant :

rouille #[near_bindgen] impl Contrat { pub fn increment(&mut self) { self.internal_increment(); } }

impl Contract { pub fn internal_increment(&mut self) { self.counter += 1; } }

Pour la fonction de rappel, elle doit être définie comme pub et utiliser le macro #[private] pour s'assurer qu'elle ne peut être appelée que par le contrat lui-même :

rouille #[near_bindgen] impl Contrat { #[private] pub fn resolve_transfer(&mut self) { // logique de rappel } }

2. Contrôle d'accès des fonctions privilégiées

En plus de la visibilité des fonctions, il est également nécessaire d'établir un mécanisme de liste blanche de contrôle d'accès. Vous pouvez implémenter des traits personnalisés:

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

Dans la fonction de privilège, l'appel à assert_owner() peut restreindre l'exécution uniquement au propriétaire :

rouille impl Contrat { pub fn privileged_function(&mut self) { self.assert_owner(); // Opérations privilégiées } }

Cela permet de mettre en œuvre un mécanisme de liste blanche de base, et peut également être étendu pour réaliser un contrôle d'accès complexe avec plusieurs utilisateurs et plusieurs listes blanches.

La sécurité des contrats doit être considérée sous plusieurs angles, y compris le contrôle du moment de l'appel, le mécanisme de multi-signature, etc., qui seront présentés en détail dans des articles ultérieurs.

GET5.66%
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
  • 9
  • Partager
Commentaire
0/400
GasWastervip
· 07-24 14:55
Encore en train d'étudier des choses profondes.
Voir l'originalRépondre0
rugdoc.ethvip
· 07-24 12:22
C'est vraiment un cliché.
Voir l'originalRépondre0
GateUser-9ad11037vip
· 07-24 03:37
Faut-il compléter le mécanisme de liste noire ~
Voir l'originalRépondre0
DefiPlaybookvip
· 07-23 10:17
Les données globales montrent que le contrôle d'accès reste dans le top 3 des vulnérabilités des contrats.
Voir l'originalRépondre0
SeeYouInFourYearsvip
· 07-21 20:27
rust est comme ça.
Voir l'originalRépondre0
OnchainDetectivevip
· 07-21 20:27
Le contrôle d'accès est illusoire, il est temps de vérifier les portes dérobées.
Voir l'originalRépondre0
rekt_but_resilientvip
· 07-21 20:21
Ce mécanisme de sécurité de contrat est nul.
Voir l'originalRépondre0
DarkPoolWatchervip
· 07-21 20:13
C'est plutôt bien écrit, mais je me suis endormi en le lisant.
Voir l'originalRépondre0
MEVSandwichVictimvip
· 07-21 20:11
Je souligne, hein !
Voir l'originalRépondre0
Afficher plus
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)