市值: $2.827T -4.84%
體積(24小時): $188.512B 68.83%
恐懼與貪婪指數:

38 - 害怕

  • 市值: $2.827T -4.84%
  • 體積(24小時): $188.512B 68.83%
  • 恐懼與貪婪指數:
  • 市值: $2.827T -4.84%
加密
主題
加密植物
資訊
加密術
影片
頂級加密植物

選擇語言

選擇語言

選擇貨幣

加密
主題
加密植物
資訊
加密術
影片

如何保護您的智能合約免受重入攻擊?

Reentrancy vulnerabilities arise when external calls precede state updates, enabling malicious recursive calls—mitigated by Checks-Effects-Interactions, ReentrancyGuard, and cautious gas limits.

2026/01/23 10:39

了解重入漏洞

1. 重入攻擊利用外部合約在初始函數執行完成之前回調到易受攻擊的合約的能力。

2. 當狀態更改在外部調用之前未最終確定時,就會發生這種情況,從而允許惡意代碼重複操縱餘額或標誌。

3. 2016 年臭名昭著的 DAO 黑客事件展示了遞歸提款模式如何耗盡價值超過 6000 萬美元的 ETH。

4. 此類漏洞在處理轉賬、提款或任何涉及外部調用和狀態更新的邏輯的函數中大量出現。

5. 0.8.0 之前的 Solidity 版本缺乏內置的重入防護,這使得手動保護對於遺留部署至關重要。

檢查-效果-交互模式的實現

1. 該架構規則要求所有內部狀態修改發生在任何外部交互之前。

2. 例如,更新用戶餘額必須先於呼叫轉移呼叫另一個地址。

3. 違反此命令將為攻擊者劫持控制流並重新進入同一功能打開大門。

4. 即使排序正確,開發人員也必須驗證沒有中間函數(例如事件發射器或修飾符)觸發意外的外部調用。

5. 像 Slither 和 MythX 這樣的工具可以在字節碼和源代碼的靜態分析過程中檢測到與此模式的偏差。

使用 ReentrancyGuard 修飾符

1. OpenZeppelin 的ReentrancyGuard是一個經過廣泛審核的實用程序,它使用布爾標誌鎖定函數。

2. 修飾符在執行前將_status設置為_ENTERED ,並在完成後將其重置為_NOT_ENTERED

3. 由於活動鎖,任何嘗試重新進入同一受保護函數的嵌套調用都將恢復。

4. 除非所有敏感入口點共享相同的防護實例,否則它不會阻止跨功能重入。

5. 開發人員必須確保繼承層次結構正確初始化保護狀態並避免隱藏內部變量。

Gas 限製作為緩解策略

1. 明確限制在call.gas(2300)等低級調用中轉發的 Gas 可以防止接收者合約執行複雜的邏輯。

2. 該技術模仿了sendtransfer的 Gas 津貼,將執行限制為 2300 Gas。

3. 然而,僅僅依靠 Gas 限制是脆弱的——未來的 EVM 升級或自定義操作碼可能會不可預測地改變 Gas 成本。

4. 它還破壞了與需要超過最少 Gas 來實現回退邏輯的合約的兼容性,例如執行日誌記錄或重新平衡的合約。

5. 基於氣體的緩解措施應該補充而不是取代結構性保障措施,例如重入防護和國家命令。

常見問題解答

問:視圖或純函數中可以發生重入嗎?答:不能。這些函數不能執行狀態改變操作或外部調用,從而消除了遞歸干擾的可能性。

問:使用 delegatecall 是否可以防止重入?答:不是天生的。雖然delegatecall保留調用者的存儲上下文,但如果目標邏輯包含不受保護的外部交互,它不會阻止可重入模式。

問:應付回退功能總是危險的嗎?答:僅當它執行狀態更新或外部調用而沒有重入保護時。在沒有副作用的情況下接受 ETH 的最小回退帶來的風險可以忽略不計。

問:可升級的代理模式是否會增加重入風險?答:是的,如果實施合約缺乏適當的保護,並且代理在未經驗證的情況下轉發調用,攻擊者可能會同時利用代理邏輯和業務邏輯。

免責聲明:info@kdj.com

所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!

如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。

相關知識

如何使用LayerZero合約執行跨鏈消息?

如何使用LayerZero合約執行跨鏈消息?

2026-01-18 13:19:39

了解 LayerZero 架構1. LayerZero 作為一種輕量級、無需許可的互操作性協議運行,無需依賴可信中介或包裝資產即可實現區塊鏈之間的通信。 2. 它利用部署在每條鏈上的超輕節點(ULN)來驗證消息的完整性和一致性,而無需存儲完整的區塊鏈狀態。 3. 核心組件包括處理消息路由的 Endp...

如何實施EIP-712進行安全簽名驗證?

如何實施EIP-712進行安全簽名驗證?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定義了以太坊應用程序中類型化結構化數據哈希和簽名的標準。 2. 它使錢包能夠在簽名請求期間顯示人類可讀的域和消息字段,而不是原始的十六進製字符串。 3. 該規範通過域分隔符哈希引入域分離,防止跨不同 dApp 或鏈的簽名重放。 4. 每個簽名的有效...

如何通過新合約交互獲得空投資格?

如何通過新合約交互獲得空投資格?

2026-01-24 21:00:23

了解合約交互要求1. 大多數空投活動都要求與部署在受支持的區塊鏈(例如以太坊、Arbitrum 或 Base)上的智能合約進行直接交互。 2. 交互通常涉及使用連接到 dApp 接口的錢包執行諸如approve() 、 stake()或mint()之類的函數。 3. 某些協議需要多種交易類型,例如將...

如何監控智能合約的安全警報?

如何監控智能合約的安全警報?

2026-01-21 07:59:57

鏈上監控工具1. Etherscan和Blockscout等區塊鏈瀏覽器允許實時檢查合約字節碼、交易日誌和內部調用。 2. 在信任任何鏈上數據之前必須確認合約驗證狀態——未經驗證的合約存在高風險。 3. 事件日誌解析可以檢測異常狀態變化,例如意外的代幣轉移或所有權修改。 4. 可以針對特定事件簽名設...

如何建立自動支付合同並為其提供資金?

如何建立自動支付合同並為其提供資金?

2026-01-26 08:59:35

了解智能合約部署1. 開發者必鬚根據gas效率和安全性要求選擇兼容的區塊鏈平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是編寫支付自動化邏輯的主要語言,特別是對於定期或有條件的轉賬。 3. 在主網部署之前,使用 Hardhat 或 Foundry 等本地開發環境來...

如何使用 OpenZeppelin 合約構建安全的 dApp?

如何使用 OpenZeppelin 合約構建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合約基礎知識1. OpenZeppelin Contracts 是一個可重用、經過社區審核的智能合約組件庫,專為以太坊和 EVM 兼容的區塊鏈而構建。 2. 庫中的每個合約都遵循嚴格的安全實踐,包括遵守“檢查-效果-交互”模式以及廣泛使用訪問控制修飾符。 3. 該庫提...

如何使用LayerZero合約執行跨鏈消息?

如何使用LayerZero合約執行跨鏈消息?

2026-01-18 13:19:39

了解 LayerZero 架構1. LayerZero 作為一種輕量級、無需許可的互操作性協議運行,無需依賴可信中介或包裝資產即可實現區塊鏈之間的通信。 2. 它利用部署在每條鏈上的超輕節點(ULN)來驗證消息的完整性和一致性,而無需存儲完整的區塊鏈狀態。 3. 核心組件包括處理消息路由的 Endp...

如何實施EIP-712進行安全簽名驗證?

如何實施EIP-712進行安全簽名驗證?

2026-01-20 22:20:26

EIP-712 概述和核心目的1. EIP-712 定義了以太坊應用程序中類型化結構化數據哈希和簽名的標準。 2. 它使錢包能夠在簽名請求期間顯示人類可讀的域和消息字段,而不是原始的十六進製字符串。 3. 該規範通過域分隔符哈希引入域分離,防止跨不同 dApp 或鏈的簽名重放。 4. 每個簽名的有效...

如何通過新合約交互獲得空投資格?

如何通過新合約交互獲得空投資格?

2026-01-24 21:00:23

了解合約交互要求1. 大多數空投活動都要求與部署在受支持的區塊鏈(例如以太坊、Arbitrum 或 Base)上的智能合約進行直接交互。 2. 交互通常涉及使用連接到 dApp 接口的錢包執行諸如approve() 、 stake()或mint()之類的函數。 3. 某些協議需要多種交易類型,例如將...

如何監控智能合約的安全警報?

如何監控智能合約的安全警報?

2026-01-21 07:59:57

鏈上監控工具1. Etherscan和Blockscout等區塊鏈瀏覽器允許實時檢查合約字節碼、交易日誌和內部調用。 2. 在信任任何鏈上數據之前必須確認合約驗證狀態——未經驗證的合約存在高風險。 3. 事件日誌解析可以檢測異常狀態變化,例如意外的代幣轉移或所有權修改。 4. 可以針對特定事件簽名設...

如何建立自動支付合同並為其提供資金?

如何建立自動支付合同並為其提供資金?

2026-01-26 08:59:35

了解智能合約部署1. 開發者必鬚根據gas效率和安全性要求選擇兼容的區塊鏈平台,例如以太坊、Polygon或Arbitrum。 2. Solidity 仍然是編寫支付自動化邏輯的主要語言,特別是對於定期或有條件的轉賬。 3. 在主網部署之前,使用 Hardhat 或 Foundry 等本地開發環境來...

如何使用 OpenZeppelin 合約構建安全的 dApp?

如何使用 OpenZeppelin 合約構建安全的 dApp?

2026-01-18 11:19:49

了解 OpenZeppelin 合約基礎知識1. OpenZeppelin Contracts 是一個可重用、經過社區審核的智能合約組件庫,專為以太坊和 EVM 兼容的區塊鏈而構建。 2. 庫中的每個合約都遵循嚴格的安全實踐,包括遵守“檢查-效果-交互”模式以及廣泛使用訪問控制修飾符。 3. 該庫提...

看所有文章

User not found or password invalid

Your input is correct