乐趣区

关于区块链:成长随笔-简单回顾一下重入漏洞攻击

18 年的时候在北航听陈博士讲课的时候,就曾经晓得什么是重入破绽,然而那是还没有很深刻重入破绽。明天回顾了一下慢雾的重入破绽的介绍,发现讲得曾经十分简洁的分明了。

慢雾重入破绽:

https://mp.weixin.qq.com/s/4j…

自从 0.8.9 更新了平安的函数代码库之后,有一段代码会被审计成“平安”,而且越来越少人关注重入破绽了。

function update() {uint value = deposits[msg.sender];
   safeTransferETH(msg.sender, value)
   deposits[msg.sender] = 0;
}

剖析发现这一段代码的性能是:

获取用户的贷款数额
应用 safeTransferETH 函数发送用户的贷款
把用户的贷款数额置为零
个别的审计会认为这段代码是平安的,因为其应用的是 safeTransferETH 个别意义上是平安的函数。

然而这其实是仍然是能够被重入攻打的。

具体能够看:https://www.anquanke.com/post…

总结

(1)作为开发人员
站在开发者的角度咱们须要做的是写好代码,防止重入破绽的产生。

  1. 写代码时须要遵循先判断,后写入变量在进行内部调用的编码标准(Checks-Effects-Interactions);
  2. 退出防重入锁。

(2)作为审计人员

作为审计人员咱们须要关注的是重入破绽的特色:所有波及到内部合约调用的代码地位都是不平安的。这样在审计过程中须要重点关注内部调用,而后推演内部调用可能产生的危害,这样就能判断这个中央是否会因为重入点而产生危害。

(3)切记切记:所有代码中,先转账,再更改状态的代码,都有被重入的可能。

退出移动版