研究過去的智能合約漏洞對於成為更好的 Solidity 開發者非常有幫助。 我最近花了一些時間回顧過去幾年發生的許多漏洞。 理解黑客攻擊的根本原因是學習如何以不同的方式思考編寫代碼的好方法。 這也讓你對於在查看新代碼庫時哪些組件是最關鍵的有更好的直覺。 我建議任何想要提升自己 Solidity 技能的人都去查看 @RektHQ 上的過去漏洞,或者查看 @phylaxsystems 的文檔,我們在那裡有對黑客攻擊的分析以及如何通過斷言來防止這些攻擊。 通過研究這些過去的黑客攻擊,我意識到這些漏洞往往是由於代碼中缺少檢查或不正確的計算,導致協議進入了它們不應該進入的狀態。一旦漏洞發生,這個錯誤往往看起來是顯而易見的。我們需要確保協議能更容易地識別這些問題。 許多協議將受益於花時間定義不變式並確保這些不變式不會被違反。 編寫斷言是一個很好的方法,可以確保這些不變式永遠不會被違反。 我最近花時間研究的最新漏洞是 2025 年 3 月的 Abracadabra 漏洞,損失約 1300 萬美元: 漏洞:sendValueInCollateral() 提取了真實代幣,但忘記更新內部會計變量 漏洞:orderValueInCollateral() 即使在代幣被移除後仍然報告相同的抵押品價值 結果:攻擊者反覆借用 "幻影抵押品" 直到資金被抽空 一個檢查 "報告的抵押品" 與 "實際抵押品" 匹配的簡單不變式的斷言將能夠防止這次黑客攻擊。
936