-
bitcoin $78129.654352 USD
1.79% -
ethereum $2299.770407 USD
2.04% -
tether $0.998507 USD
0.02% -
bnb $702.546271 USD
1.39% -
xrp $1.275243 USD
1.78% -
usd-coin $0.999735 USD
0.01% -
solana $93.125039 USD
1.13% -
tron $0.321691 USD
0.32% -
zcash $1275.053782 USD
12.04% -
hyperliquid $85.075957 USD
1.63% -
monero $635.813581 USD
1.76% -
dogecoin $0.074823 USD
1.13% -
unus-sed-leo $9.292519 USD
-0.02% -
chainlink $11.109045 USD
-0.08% -
cardano $0.190836 USD
1.82%
Wie kann man Wiedergutmachung in der Solidität verhindern?
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
Verständnis der Wiedereinzug in der Solidität
Re -Entrancy ist eine kritische Sicherheitsanfälligkeit in Smart -Verträgen, die auftreten, wenn eine Funktion einen externen Aufruf eines nicht vertrauenswürdigen Vertrags macht, bevor sie ihre internen Zustandsänderungen abschließen. Dies ermöglicht es dem externen Vertrag, rekursiv in die ursprüngliche Funktion zurückzukehren , möglicherweise Geld zu entlassen oder die Logik des Vertrags zu beschädigen.
Der berüchtigte Dao -Hack im Jahr 2016 war ein hervorragendes Beispiel dafür, wie die Wiedereinzugsgebiet ausgenutzt werden kann. Der Angreifer nutzte eine böswillige Fallback -Funktion, um wiederholt einen Rückzug auszulösen, bevor der Vertrag seinen Restbetrag aktualisierte, was zum Verlust von Millionen von Äther führte.
Um solche Schwachstellen zu verhindern, müssen Entwickler Best Practices und Entwurfsmuster implementieren, die externe Anrufe sichern und sicherstellen, dass Zustandsänderungen vor einer externen Interaktion auftreten.
Verwenden Sie das Muster für die Auswirkungen des Kontroll-Effects
Eine der effektivsten Möglichkeiten zur Verhinderung der Wiederverwaltung besteht darin, das Muster der Prüfeffekte zu befolgen. Dieses Muster stellt sicher, dass alle internen Zustandsänderungen vorgenommen werden, bevor externe Anrufe ausgeführt werden.
- Überprüfungen : Validieren Sie Eingänge und Bedingungen.
- Effekte : Aktualisieren Sie die staatlichen Variablen des Vertrags.
- Interaktionen : Rufen Sie externe Verträge an oder senden Sie Ether.
Durch die Einhaltung dieser Reihenfolge stellen Sie sicher, dass der interne Zustand bereits aktualisiert wurde, wodurch der Zugriff auf doppelte Ausgaben oder nicht autorisierter Gleichgewichtszugriff verhindern wurde.
Betrachten Sie beispielsweise eine einfache Auszahlungsfunktion:
function withdraw(uint amount) public {require(balances[msg.sender] >= amount); balances[msg.sender] -= amount; (bool success, ) = msg.sender.call{value: amount}(''); require(success);
}
In diesem Fall wird der Restbetrag vor dem externen Anruf aktualisiert, wodurch es vor Wiedereintritt sicher ist.
MUTEX LOCKS implementieren
Eine weitere wirksame Methode zur Verhinderung der Wiederverwaltung ist die Verwendung eines Mutex -Schlosses , bei dem es sich um eine Zustandsvariable handelt, die die Wiedereinzugsbehörde während der Ausführung verhindert.
Ein einfaches Beispiel besteht darin, eine booleale Flagge zu verwenden, um die Wiedereintritt zu blockieren:
bool private locked;Funktion abheben (uint Betrag) 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;}
Dies stellt sicher, dass die Funktion nicht wieder eingegeben werden kann, während sie noch ausgeführt wird , was rekursive Anrufe effektiv blockiert. Entwickler müssen jedoch vorsichtig sein, bei Verwendung von Mutexes keine Deadlocke oder unerwartetes Verhalten zu erstellen.
Verwenden Sie die Wiedereinzug aus Openzeppelin
Anstatt die Mutex -Logik manuell zu implementieren, können Entwickler den von Openzeppelin bereitgestellten Wiedervertragsvertrag verwenden, der eine sichere und getestete Lösung bietet.
REENTANCEGUARD verwenden:
- Importieren Sie den Vertrag:
import '@openzeppelin/contracts/security/ReentrancyGuard.sol'; - Erben Sie in Ihrem Vertrag:
contract MyContract is ReentrancyGuard - Wenden Sie den
nonReentrantModifikator auf Funktionen an, die für Wiedereinzugsgebiete anfällig sind.
pragma solidity ^0.8.0;Import '@openzeppelin/contracts/Security/Re -Uneranzguard.Sol';Contract Secure Withdrawal ist Wiedereinzug {
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'); }}
Dieser Ansatz ist die Komplexität des MUTEX -Umgangs abstrahiert und das Risiko der Einführung von Fehlern verringert , was es für viele Entwickler zu einer bevorzugten Methode macht.
Vermeiden Sie Rohanrufe und verwenden Sie die Übertragung sicher
In Solidität ist die Verwendung von address.call{value: ...}('') flexibler als transfer() oder send() , aber es wird auch die Gasgrenze entfernt , wodurch es anfällig für Wiedereinzug ist.
-
transfer()undsend()nur 2300 Gas vorwärts vorantreiben, was für eine aussagekräftige Ausführung nicht ausreicht, wodurch die Wiedereinzugsbehörde verhindert wird . -
call()leitet jedoch alle verfügbaren Gas weiter, sodass Angreifer eine komplexe böswillige Logik während des Fallbacks ausführen oder Funktionen erhalten.
Um dies zu mildern:
- Bevorzugen Sie
transfer()odersend()für einfache Ethertransfers. - Wenn die Verwendung
call()erforderlich ist, stellen Sie sicher, dass vor dem Anruf staatliche Änderungen erfolgen und die Wiederherstellungswächter vorhanden sind.
FAQ: häufig gestellte Fragen
F: Was ist ein Wiederherstellungsangriff in Solidität? A: Ein Wiederherstellungsangriff tritt auf, wenn ein externer Vertrag vor Abschluss der Ausführung in die Berufungsfunktion zurückruft , was häufig zu nicht autorisierten Fondsabhebungen oder staatlichen Korruption führt.
F: Kann ich die Wiedereinzugsgebiet verhindern, ohne Openzeppelins Wiedereinzug zu verwenden? A: Ja, durch manuell implementiert das Muster für Kontroll-Effekte oder eine Mutex-Sperre, um die Wiedereinzugsaufnahme während der Funktionsausführung zu blockieren.
F: Ist es sicher, Adresse zu verwenden.Transfer () in modernen Soliditätsversionen? A: Während transfer() Gas begrenzt und die Wiedereinstellung verhindert, kann dies unerwartet ausfallen, wenn der Empfängervertrag kein Gas mehr hat. Es wird immer noch als sicherer als call() für einfache Übertragungen angesehen.
F: Sind alle externen Aufrufe in Solidität anfällig für Wiedereintritt? A: Nicht alle, sondern jeder externe Anruf bei einem von Benutzer kontrollierten Vertrag kann ein potenzieller Vektor sein. Die Verwundbarkeit entsteht, wenn Zustandsänderungen dem externen Anruf folgen , nicht den Anruf selbst.
Haftungsausschluss:info@kdj.com
Die bereitgestellten Informationen stellen keine Handelsberatung dar. kdj.com übernimmt keine Verantwortung für Investitionen, die auf der Grundlage der in diesem Artikel bereitgestellten Informationen getätigt werden. Kryptowährungen sind sehr volatil und es wird dringend empfohlen, nach gründlicher Recherche mit Vorsicht zu investieren!
Wenn Sie glauben, dass der auf dieser Website verwendete Inhalt Ihr Urheberrecht verletzt, kontaktieren Sie uns bitte umgehend (info@kdj.com) und wir werden ihn umgehend löschen.
-
LIT Jetzt handeln$3.45
9.10%
-
VVV Jetzt handeln$23.57
7.66%
-
ZEC Jetzt handeln$1287.23
7.65%
-
RAY Jetzt handeln$1.66
7.24%
-
POL Jetzt handeln$0.09409
6.85%
-
STABLE Jetzt handeln$0.02888
6.48%
- Krypto-Verlust einer französischen Bank: ZachXBT deckt mutmaßlichen 133-Millionen-Dollar-Raub bei Crédit Mutuel Arkéa auf
- 2026-11-04 16:55:01
- Demokraten sichern sich die Kontrolle im US-Repräsentantenhaus und läuten inmitten der Zwischenwahlen eine neue Ära für den Kongress ein
- 2026-11-04 16:45:01
- US Midterms, Prognosemärkte und Krypto-Wettbewerbe: Eine riskante Wette auf die Zukunft Washingtons
- 2026-11-04 04:30:22
- Digitale Vermögenswerte, globale Finanzen und KI: Navigieren durch die nächste Grenze bei DavosWeb3 und darüber hinaus
- 2026-11-04 04:30:22
- Avalanche AVAX-Preis sinkt aufgrund allgemeiner Marktprobleme; Das institutionelle Interesse bleibt groß
- 2026-11-03 12:35:02
- Warum ist der Mengenpreis gesunken? Ein tiefer Einblick in den jüngsten Rückgang von QNT inmitten der Marktunruhe
- 2026-11-03 12:55:01
Verwandtes Wissen
So berechnen Sie die Gesamtkosten für das Halten einer BTCUSDT-Futures-Position
Oct 26,2026 at 04:06am
Gesamtkostenkomponenten für BTCUSDT-Futures-Positionen 1. Die Gesamtkosten für das Halten einer BTCUSDT-Futures-Position umfassen sowohl explizite als...
So überwachen Sie die XRPUSDT-Finanzierungsraten und das offene Interesse gemeinsam
Oct 20,2026 at 06:39pm
Mechanik der Finanzierungsrate bei unbefristeten XRPUSDT-Verträgen 1. Die Finanzierungsraten für XRPUSDT Perpetual Swaps werden alle acht Stunden anha...
So legen Sie einen Break-Even-Stop-Loss für SOLUSDT Perpetual Futures fest
Oct 23,2026 at 09:34am
Verständnis der Break-Even-Stop-Loss-Mechanik 1. Ein Break-Even-Stop-Loss ist eine dynamische Order, die sich nach oben anpasst, wenn sich die Positio...
So verwenden Sie den Binance-Futures-Rechner für ETHUSDT-Trades
Oct 21,2026 at 02:00am
Verstehen der Schnittstelle des Binance-Futures-Rechners 1. Der Rechner ist direkt in die Binance-Futures-Handelsschnittstelle eingebettet und über di...
So überprüfen Sie den BTCUSDT-Markpreis vor einer Futures-Liquidation
Oct 26,2026 at 12:20pm
Markpreis in BTCUSDT-Futures verstehen 1. Der Markpreis ist ein berechneter Wert, der von Börsen verwendet wird, um unfaire Liquidationen bei volatile...
So passen Sie die Hebelwirkung eines unbefristeten TRUMPUSDT-Vertrags an
Oct 30,2026 at 10:19pm
Grundlegendes zur Mechanik des unbefristeten Vertrags von TRUMPUSDT 1. TRUMPUSDT ist ein thematischer, unbefristeter Terminkontrakt, der an mehreren T...
So berechnen Sie die Gesamtkosten für das Halten einer BTCUSDT-Futures-Position
Oct 26,2026 at 04:06am
Gesamtkostenkomponenten für BTCUSDT-Futures-Positionen 1. Die Gesamtkosten für das Halten einer BTCUSDT-Futures-Position umfassen sowohl explizite als...
So überwachen Sie die XRPUSDT-Finanzierungsraten und das offene Interesse gemeinsam
Oct 20,2026 at 06:39pm
Mechanik der Finanzierungsrate bei unbefristeten XRPUSDT-Verträgen 1. Die Finanzierungsraten für XRPUSDT Perpetual Swaps werden alle acht Stunden anha...
So legen Sie einen Break-Even-Stop-Loss für SOLUSDT Perpetual Futures fest
Oct 23,2026 at 09:34am
Verständnis der Break-Even-Stop-Loss-Mechanik 1. Ein Break-Even-Stop-Loss ist eine dynamische Order, die sich nach oben anpasst, wenn sich die Positio...
So verwenden Sie den Binance-Futures-Rechner für ETHUSDT-Trades
Oct 21,2026 at 02:00am
Verstehen der Schnittstelle des Binance-Futures-Rechners 1. Der Rechner ist direkt in die Binance-Futures-Handelsschnittstelle eingebettet und über di...
So überprüfen Sie den BTCUSDT-Markpreis vor einer Futures-Liquidation
Oct 26,2026 at 12:20pm
Markpreis in BTCUSDT-Futures verstehen 1. Der Markpreis ist ein berechneter Wert, der von Börsen verwendet wird, um unfaire Liquidationen bei volatile...
So passen Sie die Hebelwirkung eines unbefristeten TRUMPUSDT-Vertrags an
Oct 30,2026 at 10:19pm
Grundlegendes zur Mechanik des unbefristeten Vertrags von TRUMPUSDT 1. TRUMPUSDT ist ein thematischer, unbefristeter Terminkontrakt, der an mehreren T...
Alle Artikel ansehen














