研究过去的智能合约漏洞对于成为更好的Solidity开发者非常有帮助。 我最近花了一些时间回顾过去几年发生的许多漏洞。 理解黑客攻击的根本原因是学习如何以不同的方式思考编写代码的好方法。 这也让你对在查看新代码库时哪些组件最关键有更好的直觉。 我建议任何想要提高自己Solidity水平的人去查看@RektHQ上的过去漏洞,或者查看@phylaxsystems的文档,我们在其中对黑客攻击进行了分析,并说明了如何通过断言来防止这些攻击。 通过研究这些过去的黑客攻击,我意识到,漏洞往往是由于代码中缺少检查或错误的计算导致协议进入了不应处于的状态。一旦漏洞发生,错误通常显得很明显。我们需要确保协议能够更容易地识别这些问题。 许多协议将受益于花时间定义不变式,并确保这些不变式不会被违反。 编写断言是确保这些不变式永远不会被违反的好方法。 我最近花时间研究的最新漏洞是2025年3月的Abracadabra漏洞,损失约1300万美元: 漏洞:sendValueInCollateral()提取了真实代币,但忘记更新内部会计变量 漏洞利用:orderValueInCollateral()即使在代币被移除后仍然报告相同的抵押价值 结果:攻击者反复借用“虚假抵押品”,直到资金被抽干 一个检查“报告的抵押品”与“实际抵押品”匹配的简单不变式的断言本可以防止这次黑客攻击。
942