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 :
La visibilité des méthodes de contrat
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 :
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 :
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:
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.
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.
16 J'aime
Récompense
16
9
Partager
Commentaire
0/400
GasWaster
· 07-24 14:55
Encore en train d'étudier des choses profondes.
Voir l'originalRépondre0
rugdoc.eth
· 07-24 12:22
C'est vraiment un cliché.
Voir l'originalRépondre0
GateUser-9ad11037
· 07-24 03:37
Faut-il compléter le mécanisme de liste noire ~
Voir l'originalRépondre0
DefiPlaybook
· 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
SeeYouInFourYears
· 07-21 20:27
rust est comme ça.
Voir l'originalRépondre0
OnchainDetective
· 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_resilient
· 07-21 20:21
Ce mécanisme de sécurité de contrat est nul.
Voir l'originalRépondre0
DarkPoolWatcher
· 07-21 20:13
C'est plutôt bien écrit, mais je me suis endormi en le lisant.
Sécurité des smart contracts en Rust : Détails sur le contrôle d'accès et la gestion des autorisations
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. 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] :
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.