solidity 重入攻击解释
solidity re-entrancy attack explanation
嘿,我有一个关于重新进入的问题,我明白了逻辑,但考虑到交易时间以及 A 和 B 中的两个函数都是在下一行
re-entrancy
假设我们有 2 份合同。持有一些以太币的目标合约属于攻击者合约。现在攻击者合约想要取钱
攻击者合约有两个函数:fallback
和withdraw
// this gets triggered when ether is receive
fallback(){
A.withdraw()
}
attack(){
A.withdraw()
}
假设攻击者合约调用 attack
函数。这将调用 withdraw
内部目标合约:
目标合约:
withdraw(){
require balance>0
send ether
// before balance gets updated attacker's fallback triggers another withdraw
// send function will give the control to the attacker's contract
set balance of attacker =0
}
现在目标合约会将 ether
发送到攻击者的合约。当它发生时,攻击者的合约内部 fallback
函数被触发。 fallback
每次收到以太币时都会执行。我解释了
现在攻击者的合约收到以太币并立即在目标合约中调用withdraw
。所以目标合约的withdraw
函数一直在循环,直到目标合约的余额达到0
如果合同使用 call, send or transfer
这可能会导致
控制流到攻击者合约,因为这些函数为回退函数委托了足够的气体。一旦控制权传递给攻击者的合约,目标合约的状态将不完整。目标合约失去控制权。
嘿,我有一个关于重新进入的问题,我明白了逻辑,但考虑到交易时间以及 A 和 B 中的两个函数都是在下一行
re-entrancy
假设我们有 2 份合同。持有一些以太币的目标合约属于攻击者合约。现在攻击者合约想要取钱
攻击者合约有两个函数:fallback
和withdraw
// this gets triggered when ether is receive
fallback(){
A.withdraw()
}
attack(){
A.withdraw()
}
假设攻击者合约调用 attack
函数。这将调用 withdraw
内部目标合约:
目标合约:
withdraw(){
require balance>0
send ether
// before balance gets updated attacker's fallback triggers another withdraw
// send function will give the control to the attacker's contract
set balance of attacker =0
}
现在目标合约会将 ether
发送到攻击者的合约。当它发生时,攻击者的合约内部 fallback
函数被触发。 fallback
每次收到以太币时都会执行。我解释了
现在攻击者的合约收到以太币并立即在目标合约中调用withdraw
。所以目标合约的withdraw
函数一直在循环,直到目标合约的余额达到0
如果合同使用 call, send or transfer
这可能会导致
控制流到攻击者合约,因为这些函数为回退函数委托了足够的气体。一旦控制权传递给攻击者的合约,目标合约的状态将不完整。目标合约失去控制权。