作者:青春快乐的勇哥 | 来源:互联网 | 2024-11-12 00:47
2018年在北航听陈博士讲解时,对重入漏洞有了初步了解。最近重温了慢雾科技的相关文章,发现他们对重入漏洞的解释非常清晰明了。
慢雾科技对重入漏洞的介绍:
https://mp.weixin.qq.com/s/4j...
自Solidity 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)作为开发人员
从开发者的角度来看,我们需要确保代码的安全性,避免重入漏洞的产生。
- 编写代码时应遵循先检查、后修改变量、再进行内部调用的编码标准(Checks-Effects-Interactions);
- 使用防重入锁。
(2)作为审计人员
作为审计人员,我们需要注意重入漏洞的特点:所有涉及内部合约调用的代码位置都是潜在的不安全点。因此,在审计过程中应重点关注内部调用,并推演内部调用可能带来的风险,从而判断这些位置是否可能因重入点而产生危害。
(3)特别注意:所有代码中,先转账再更改状态的代码,都存在被重入攻击的风险。