-
Bitcoin
$117500
0.44% -
Ethereum
$3776
1.12% -
XRP
$3.567
3.83% -
Tether USDt
$1.000
-0.01% -
BNB
$768.9
2.47% -
Solana
$198.4
10.33% -
USDC
$0.9998
0.00% -
Dogecoin
$0.2738
1.18% -
Cardano
$0.8954
5.42% -
TRON
$0.3144
0.75% -
Hyperliquid
$44.50
-2.35% -
Stellar
$0.4759
3.64% -
Sui
$3.999
3.59% -
Chainlink
$19.56
2.05% -
Hedera
$0.2713
0.83% -
Avalanche
$25.56
3.02% -
Bitcoin Cash
$523.9
-3.36% -
Shiba Inu
$0.00001551
0.94% -
Litecoin
$116.4
-0.19% -
UNUS SED LEO
$8.996
0.08% -
Toncoin
$3.347
3.04% -
Polkadot
$4.521
2.01% -
Uniswap
$11.00
4.70% -
Ethena USDe
$1.001
0.02% -
Pepe
$0.00001418
2.30% -
Monero
$320.7
-0.73% -
Bitget Token
$4.949
1.04% -
Dai
$0.9999
-0.01% -
Aave
$323.8
1.04% -
Bittensor
$450.1
9.57%
Comment éviter la réentrance dans la solidité?
La réentrance dans la solidité se produit lorsqu'un appel externe permet à un contrat malveillant d'exécuter récursivement la même fonction, potentiellement de drainage des fonds ou de l'état de corruption.
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()
etsend()
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()
ousend()
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.
-
CCD
$0.008219
77.26%
-
SPK
$0.06824
75.60%
-
DJI6930
$0.07862
41.73%
-
DHN
$4.5
38.37%
-
UMA
$1.8
37.04%
-
DRIFT
$0.6884
36.20%
- Bitcoin, Trump Media et Acquisition: une perspective de New York
- 2025-07-22 06:30:12
- Capital de capital-risque, Trésor cryptographique et Ethena (ENA): une perspective de New York
- 2025-07-22 06:50:13
- Solana: Construire un Nasdaq décentralisé avec marché d'assemblage de blocs?
- 2025-07-22 06:30:12
- Jito, Bam et Solana Mev: une nouvelle ère pour Blockspace?
- 2025-07-22 06:50:13
- Raydium, Crypto Payroll et Transformation: A New Era for FinTech
- 2025-07-22 07:30:12
- Arctic Pablo Coin Prévente: L'opportunité de la pièce de mèmes de 2025?
- 2025-07-22 07:35:12
Connaissances connexes

Qu'est-ce qu'un fabricant contre des frais de preneur?
Jul 19,2025 at 01:14am
Comprendre les bases des frais d'échange de crypto-monnaie Dans le monde du trading des crypto-monnaies, les frais de fabricant vs preneur sont un...

Comment sécuriser votre compte de trading à terme crypto?
Jul 21,2025 at 11:42pm
Comprendre les risques dans le trading à terme crypto Le trading à terme cryptographique implique des risques importants en raison de la volatilité et...

Bitcoin Futures échange-t-il une arnaque?
Jul 22,2025 at 01:42am
Comprendre Bitcoin Trading à terme Bitcoin Le trading à terme fait référence au processus d'achat et de vente de contrats qui tirent leur valeur d...

Comment analyser les données à terme Bitcoin de CME?
Jul 19,2025 at 05:22pm
Comprendre Bitcoin Futures sur CME Bitcoin Les contrats à terme sur le groupe CME (Chicago Mercantile Exchange) représentent un instrument financier r...

Types de commandes avancées pour Bitcoin Contrats
Jul 21,2025 at 01:14pm
Comprendre les types de commandes avancées dans les contrats Bitcoin Dans le monde du trading à terme Bitcoin , les types de commandes avancés jouent ...

Erreurs courantes dans le trading à terme crypto
Jul 20,2025 at 09:56pm
Surechure sans gestion des risques L'une des erreurs les plus courantes dans le trading à terme cryptographique est le surévaluation . Les commerç...

Qu'est-ce qu'un fabricant contre des frais de preneur?
Jul 19,2025 at 01:14am
Comprendre les bases des frais d'échange de crypto-monnaie Dans le monde du trading des crypto-monnaies, les frais de fabricant vs preneur sont un...

Comment sécuriser votre compte de trading à terme crypto?
Jul 21,2025 at 11:42pm
Comprendre les risques dans le trading à terme crypto Le trading à terme cryptographique implique des risques importants en raison de la volatilité et...

Bitcoin Futures échange-t-il une arnaque?
Jul 22,2025 at 01:42am
Comprendre Bitcoin Trading à terme Bitcoin Le trading à terme fait référence au processus d'achat et de vente de contrats qui tirent leur valeur d...

Comment analyser les données à terme Bitcoin de CME?
Jul 19,2025 at 05:22pm
Comprendre Bitcoin Futures sur CME Bitcoin Les contrats à terme sur le groupe CME (Chicago Mercantile Exchange) représentent un instrument financier r...

Types de commandes avancées pour Bitcoin Contrats
Jul 21,2025 at 01:14pm
Comprendre les types de commandes avancées dans les contrats Bitcoin Dans le monde du trading à terme Bitcoin , les types de commandes avancés jouent ...

Erreurs courantes dans le trading à terme crypto
Jul 20,2025 at 09:56pm
Surechure sans gestion des risques L'une des erreurs les plus courantes dans le trading à terme cryptographique est le surévaluation . Les commerç...
Voir tous les articles
