Solidity智能合约的重入攻击

您所在的位置:网站首页 智能合约的作用 Solidity智能合约的重入攻击

Solidity智能合约的重入攻击

2023-09-02 13:10| 来源: 网络整理| 查看: 265

1. 何为重入攻击?

如果一个计算机程序或子程序在执行过程中被中断,然后在前一次调用完成之前可被安全地再次调用,则称之为可重入。 中断的原因可为:

内部动作,如jump 或 call;外部动作,如interrupt 或 signal。

一旦重入调用完成后,之前的调用就将恢复执行。使用某些代码执行此操作将导致重入攻击。

智能合约在其正常执行过程中可能会通过:

function call或 simply transfer Ether

来调用其它合约。 这些合约可:

自己调用其它合约call back to the contract that called themcall back to any other in the call stack

这样的合约可称为是可重入的。 重入本身不是问题,但当其会引起状态不一致时,就有问题了。

当合约的相关不变量为true时,可认为state是一致的。如ERC20中,其主要不变量为:所有的balance之和不会超过已知的总供应量。

通常情况下,函数假设其开始运行时合约状态是一致的,函数运行后的状态也仍然是保持一致的。而在函数执行过程中,只要没人发现,其状态是可能是不一致的。此时,就有可能存在重入攻击的问题。 因此,不仅应要求执行后的状态一致,还应要求在每一个可能的重入点都保持状态一致。

2. 重入攻击举例

以下代码存在重入攻击问题:

function withdraw(uint _amount) public { if (amount


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3