Soildity安全之時間戳依賴區塊鏈
WF曲速未來:Soildity作為編寫智能合約的語言,已經被廣泛的應用。但同時,開發者和用戶也得到了慘痛的教訓,智能合約的安全問題層出不窮。因此,我們總結了一些常見的Solidity安全問題。前車之鑒,后車之師,希望后來者能有所警惕。
WF曲速未來:Soildity作為編寫智能合約的語言,已經被廣泛的應用。但同時,開發者和用戶也得到了慘痛的教訓,智能合約的安全問題層出不窮。因此,我們總結了一些常見的Solidity安全問題。前車之鑒,后車之師,希望后來者能有所警惕。
時間戳依賴
時間戳:一個能表示一份數據在某個特定時間之前已經存在的、 完整的、 可驗證的數據,通常是一個字符序列,唯一地標識某一刻的時間。
數據塊時間戳歷來被用于各種應用,例如隨機性的函數,鎖定一段時間的資金以及時間相關的各種狀態變化的條件語句。通常來說都是使用礦工的本地時間作為時間戳,而這個時間大約能有900秒的范圍波動,當其他節點接受一個新區塊時,只需要驗證時間戳是否晚于之前的區塊并且與本地時間誤差在900秒以內。一個礦工可以通過設置區塊的時間戳來盡可能滿足有利于他的條件,從中獲利。
代碼案例
以下函數僅接受特定日期之后的調用。由于礦工可以影響他們的塊的時間戳(在某種程度上),他們可以嘗試使用未來設置的塊時間戳來挖掘包含其事務的塊。如果它足夠接近,它將在區塊上被接受,并且將在任何其他玩家試圖贏得游戲之前給予礦工ETH。
相關事件
Governmental(一個古老的龐氏資金盤游戲)
游戲規則
你必須要發送至少1ETH到合約,然后你會被支付10%的利息。
如果“政府”(合約)在12小時內沒有收到新的資金,最后的人獲得所有的獎池,所有人都會失去資金。
發送到合約的以太幣分配如下:5%給獎池,5%給合約擁有者,90%根據支付順序,用來支付給發送資金的人
當獎池滿了(1萬Ether),95%的資金會發送給支付者。
此攻擊原理如下
(1)部署政府在創建時提供至少1ether;
(2)讓其他人一起玩,以增加累積獎金;
(3)部署攻擊合同;
(4)調用攻擊者的攻擊功能,防止累積獎金被交付給合法的勝利者。
攻擊合同:作為玩家的礦工可以調整時間戳(未來的時間,使其看起來像是一分鐘過去了),以顯示玩家是最后一分鐘加入的時間(盡管現實中并非如此)。
觀點:
時間戳不應該用于函數或產生隨機數,或者說他們不應對游戲產生決定性作用,或者對某個重要狀態能產生重要影響。開發者在編寫合約時應注意這點。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。