Capitalisation boursière: $2.5874T -1.97%
Volume(24h): $167.1873B 17.14%
Indice de peur et de cupidité:

14 - Peur extrême

  • Capitalisation boursière: $2.5874T -1.97%
  • Volume(24h): $167.1873B 17.14%
  • Indice de peur et de cupidité:
  • Capitalisation boursière: $2.5874T -1.97%
Cryptos
Les sujets
Cryptospedia
Nouvelles
Cryptosopique
Vidéos
Top Cryptospedia

Choisir la langue

Choisir la langue

Sélectionnez la devise

Cryptos
Les sujets
Cryptospedia
Nouvelles
Cryptosopique
Vidéos

Comment éviter la réentrance dans la solidité?

Reentrancy in Solidity occurs when an external call allows a malicious contract to recursively execute the same function, potentially draining funds or corrupting state.

Jul 20, 2025 at 08:49 am

Comprendre la réentrance dans la solidité

La réentrance est une vulnérabilité de sécurité essentielle dans les contrats intelligents de Solidity qui se produisent lorsqu'une fonction fait un appel externe à un contrat non fiable avant de terminer ses modifications de l'état interne. Cela permet au contrat externe de rappeler récursivement dans la fonction d'origine, de vider potentiellement des fonds ou de corrompre la logique du contrat.

Le tristement célèbre hack DAO en 2016 a été un excellent exemple de la façon dont la réentrance peut être exploitée. L'attaquant a utilisé une fonction de secours malveillante pour déclencher à plusieurs reprises un retrait avant que le contrat ne mette à jour son solde, entraînant la perte de millions d'éther.

Pour éviter de telles vulnérabilités, les développeurs doivent mettre en œuvre les meilleures pratiques et les modèles de conception qui sécurisent les appels externes et garantir que les modifications de l'État se produisent avant toute interaction externe.

Utiliser le modèle de vérification des effets d'interactions

L'un des moyens les plus efficaces de prévenir la réentrance consiste à suivre le modèle de vérification des effets-interactions . Ce modèle garantit que toutes les modifications de l'état interne sont apportées avant que des appels externes ne soient exécutés.

  • Vérification : valider les entrées et conditions.
  • Effets : Mettez à jour les variables d'état du contrat.
  • Interactions : appelez des contrats externes ou envoyez de l'éther.

En adhérant à cet ordre, vous vous assurez que même si une tentative de réentrance se produit, l'état interne a déjà été mis à jour, empêchant l'accès à deux dépenses ou non autorisé .

Par exemple, considérez une fonction de retrait simple:

 function withdraw(uint amount) public { require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success);

}

Dans ce cas, le solde est mis à jour avant l'appel externe, ce qui le rend sécuritaire de la réentrance .

Implémenter les serrures mutex

Une autre méthode efficace pour empêcher la réentrance consiste à utiliser un verrou de mutex , qui est une variable d'état qui empêche la réentrance pendant l'exécution.

Un exemple simple consiste à utiliser un drapeau booléen pour bloquer la réintégration:

 bool private locked; Fonction se retirer (montant uint) public {


require(!locked); locked = true; require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success); locked = false;

}

Cela garantit que la fonction ne peut pas être rentrée pendant qu'elle s'exécute toujours , bloquant efficacement les appels récursifs. Cependant, les développeurs doivent être prudents pour ne pas créer de blocages ou un comportement inattendu lors de l'utilisation de mutexes.

Utilisez ReentricyGuard d'Openzeppelin

Au lieu de mettre en œuvre manuellement la logique Mutex, les développeurs peuvent utiliser le contrat de RenturcoryGuard fourni par Openzeppelin , qui propose une solution sécurisée et testée.

Pour utiliser ReentricancyGuard:

  • Importer le contrat: import '@openzeppelin/contracts/security/ReentrancyGuard.sol';
  • Hériter de celui-ci dans votre contrat: contract MyContract is ReentrancyGuard
  • Appliquer le modificateur nonReentrant aux fonctions sensibles à la réentrance.
 pragma solidity ^0.8.0; import '@ openzeppelin / contracts / security / reentricancyguard.sol';


contrat sécurisé avec Drawal est ReentricyGuard {

mapping(address => uint) public balances; function deposit() external payable { balances[msg.sender] += msg.value; } function withdraw(uint amount) external nonReentrant { require(balances[msg.sender] >= amount, 'Insufficient balance'); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success, 'Transfer failed'); }

}

Cette approche résume la complexité de la manipulation de mutex et réduit le risque d'introduire des bogues , ce qui en fait une méthode préférée pour de nombreux développeurs.

Évitez les appels bruts et utilisez le transfert en toute sécurité

Dans Solidity, l'utilisation address.call{value: ...}('') est plus flexible que transfer() ou send() , mais il supprime également la limite de gaz , la rendant vulnérable à la réentrance.

  • transfer() et send() ne transmettre que 2300 gaz , ce qui est insuffisant pour toute exécution significative, empêchant ainsi la réentrance .
  • Cependant, call() transmet tous les gaz disponibles , permettant aux attaquants d' exécuter une logique malveillante complexe pendant les fonctions de secours ou de réception.

Pour atténuer ceci:

  • Préférez transfer() ou send() pour des transferts d'éther simples.
  • Si l'utilisation call() est nécessaire, assurez-vous que les modifications d'état se produisent avant l'appel et que les gardes de réentrance sont en place.

FAQ: des questions fréquemment posées

Q: Qu'est-ce qu'une attaque de réentrance dans la solidité? R: Une attaque de réentrance se produit lorsqu'un contrat externe rappelle la fonction d'appel avant de terminer l'exécution, conduisant souvent à des retraits de fonds non autorisés ou à la corruption de l'État .

Q: Puis-je empêcher la réentrance sans utiliser d'Openzeppelin RentarnancyGuard? R: Oui, en mettant en œuvre manuellement le modèle de contrôle-effets-effets ou en utilisant un serrure Mutex pour bloquer la réentrance pendant l'exécution de la fonction.

Q: Est-il sûr d'utiliser l'adresse.transfer () dans les versions de solidité moderne? R: Bien que transfer() limite le gaz et empêche la réentrance, il peut échouer de manière inattendue si le contrat de bénéficiaire est à court de gaz. Il est toujours considéré comme plus sûr que call() pour des transferts simples.

Q: Tous les appels externes dans la solidité sont-ils vulnérables à la réentrance? R: Pas tous, mais tout appel externe à un contrat contrôlé par l'utilisateur peut être un vecteur potentiel. La vulnérabilité survient lorsque les changements d'état suivent l'appel externe, pas l'appel lui-même.

Clause de non-responsabilité:info@kdj.com

Les informations fournies ne constituent pas des conseils commerciaux. kdj.com n’assume aucune responsabilité pour les investissements effectués sur la base des informations fournies dans cet article. Les crypto-monnaies sont très volatiles et il est fortement recommandé d’investir avec prudence après une recherche approfondie!

Si vous pensez que le contenu utilisé sur ce site Web porte atteinte à vos droits d’auteur, veuillez nous contacter immédiatement (info@kdj.com) et nous le supprimerons dans les plus brefs délais.

Connaissances connexes

Comment gérer les émotions et le « trading de vengeance » dans les contrats à terme ?

Comment gérer les émotions et le « trading de vengeance » dans les contrats à terme ?

Feb 05,2026 at 12:19am

Comprendre les déclencheurs émotionnels sur les marchés à terme 1. La volatilité des marchés a un impact direct sur les états psychologiques, amplifia...

Comment analyser le sentiment du marché à l’aide de l’indice de peur et de cupidité ?

Comment analyser le sentiment du marché à l’aide de l’indice de peur et de cupidité ?

Feb 05,2026 at 07:40am

Comprendre l'indice de peur et de cupidité 1. L’indice de peur et de cupidité est une mesure composite conçue pour quantifier les états émotionnel...

Comment utiliser le profil de volume pour trouver les niveaux d’entrée clés des contrats à terme ?

Comment utiliser le profil de volume pour trouver les niveaux d’entrée clés des contrats à terme ?

Feb 04,2026 at 11:39pm

Comprendre la structure du profil de volume 1. Le profil de volume affiche la répartition du volume négocié à des niveaux de prix spécifiques sur une ...

Comment négocier des contrats à terme Bitcoin avec un effet de levier 100x ? (Configuration à haut risque)

Comment négocier des contrats à terme Bitcoin avec un effet de levier 100x ? (Configuration à haut risque)

Feb 05,2026 at 11:00am

Comprendre Bitcoin la mécanique des contrats à terme 1. Les contrats à terme Bitcoin représentent des accords d'achat ou de vente de BTC à un prix...

Comment maximiser l’efficacité du capital à l’aide du trading sur marge croisée ?

Comment maximiser l’efficacité du capital à l’aide du trading sur marge croisée ?

Feb 05,2026 at 12:40am

Fondamentaux du trading sur marge croisée 1. Le trading sur marge croisée permet aux traders d'utiliser l'intégralité du solde de leur compte ...

Comment échanger des contrats cryptographiques lors d’événements d’actualité majeurs ? (IPC/FOMC)

Comment échanger des contrats cryptographiques lors d’événements d’actualité majeurs ? (IPC/FOMC)

Feb 05,2026 at 09:59am

Comprendre la sensibilité du marché aux publications de données macro 1. Les marchés à terme des cryptomonnaies affichent une volatilité prononcée lor...

Comment gérer les émotions et le « trading de vengeance » dans les contrats à terme ?

Comment gérer les émotions et le « trading de vengeance » dans les contrats à terme ?

Feb 05,2026 at 12:19am

Comprendre les déclencheurs émotionnels sur les marchés à terme 1. La volatilité des marchés a un impact direct sur les états psychologiques, amplifia...

Comment analyser le sentiment du marché à l’aide de l’indice de peur et de cupidité ?

Comment analyser le sentiment du marché à l’aide de l’indice de peur et de cupidité ?

Feb 05,2026 at 07:40am

Comprendre l'indice de peur et de cupidité 1. L’indice de peur et de cupidité est une mesure composite conçue pour quantifier les états émotionnel...

Comment utiliser le profil de volume pour trouver les niveaux d’entrée clés des contrats à terme ?

Comment utiliser le profil de volume pour trouver les niveaux d’entrée clés des contrats à terme ?

Feb 04,2026 at 11:39pm

Comprendre la structure du profil de volume 1. Le profil de volume affiche la répartition du volume négocié à des niveaux de prix spécifiques sur une ...

Comment négocier des contrats à terme Bitcoin avec un effet de levier 100x ? (Configuration à haut risque)

Comment négocier des contrats à terme Bitcoin avec un effet de levier 100x ? (Configuration à haut risque)

Feb 05,2026 at 11:00am

Comprendre Bitcoin la mécanique des contrats à terme 1. Les contrats à terme Bitcoin représentent des accords d'achat ou de vente de BTC à un prix...

Comment maximiser l’efficacité du capital à l’aide du trading sur marge croisée ?

Comment maximiser l’efficacité du capital à l’aide du trading sur marge croisée ?

Feb 05,2026 at 12:40am

Fondamentaux du trading sur marge croisée 1. Le trading sur marge croisée permet aux traders d'utiliser l'intégralité du solde de leur compte ...

Comment échanger des contrats cryptographiques lors d’événements d’actualité majeurs ? (IPC/FOMC)

Comment échanger des contrats cryptographiques lors d’événements d’actualité majeurs ? (IPC/FOMC)

Feb 05,2026 at 09:59am

Comprendre la sensibilité du marché aux publications de données macro 1. Les marchés à terme des cryptomonnaies affichent une volatilité prononcée lor...

Voir tous les articles

User not found or password invalid

Your input is correct