以太坊智能合约安全漏洞 (1):重入攻击

本文详细介绍了以太坊智能合约的重入攻击问题,通过一个 EtherStore 合约的示例,揭示了恶意合约如何利用回退函数无限重入,导致合约资金损失。预防措施包括使用 transfer() 函数、遵循检查-效果-交互模式和引入互斥锁。文章以 The DAO 事件为例,强调了智能合约安全的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转自公众号:亨利笔记
首发于: https://hash1024.org/topics/27

本文的英文原文已有若干个中文翻译版本,但译文和原文都有错漏或不足。本文系基于译者(Henry)的理解,重新翻译并做了修正,并且加入了个人的注解和插图,力求让读者更容易领会原文的含义。为不影响阅读体验,注解没有单独标出, 可当译文 +“笔记”来阅读。感兴趣的读者可参考文末的原文地址。

虽然仍然处于起步阶段,但 Solidity 已被广泛采用,成为事实上的智能合约标准,新的区块链项目不少都兼容了 Solidity 语言, Solidity 已经用于编写了大量的以太坊智能合约。由于语言和EVM的细微差别,开发人员和用户都体会到了许多深刻的经验教训。本文目的是作为相对深入和最新的介绍性文章,详细阐述 Solidity 开发人员如何吸取前人踩坑的教训,避免重蹈覆辙。

重入问题(Re-Entrancy)

以太坊智能合约能够调用和利用其他外部合约的代码。合约通常也处理以太币,因此将以太币发送到各种外部用户地址。调用外部合约或将以太币发送到地址的操作要求合约提交外部调用。这些外部调用可以被攻击者劫持,从而迫使合约执行更多的代码(即通过 fallback 回退函数),包括回调原合约本身。所以,合约代码执行过程中将可以“重入”该合约,有点像编程语言里面的间接递归函数调用。在臭名昭著的The DAO事件中黑客使用了这种攻击,最终导致了以太坊的硬分叉。

漏洞细节

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值