概述:
重入攻击是由于智能合约调用了外部不安全合约,或者对外发送以太币,使得合约的外部调用能够被劫持,导致合约内的方法被外部合约递归调用
形成重入攻击有如下条件:
1、调用了外部不安全合约
2、使用了不安全的转账方式,未进行gas限制。
3、状态变量修改在合约交互之后
如下为漏洞合约+攻击合约:
```// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
contract EtherStore {//漏洞合约
receive() external payable{}
constructor() payable {}
mapping(address => uint) internal balances;
function deposit() external payable { //将Eth存入合约
balances[msg.sender] += msg.value;
}
function withdraw() external {//将存入的资金取出
uint balance = balances[msg.sender];
require(balance > 0);//检查
(bool sent, ) = msg.sender.call{value: balance}("");//交互--发起转账
require(sent, "Failed to send Ether");文章来源:https://www.toymoban.com/news/detail-467960.html
balances[msg.sender] = 0文章来源地址https://www.toymoban.com/news/detail-467960.html
到了这里,关于智能合约安全之重入攻击浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!