solidity智能合约中tx.origin的正确使用场景

简介: solidity智能合约中tx.origin的正确使用场景

简介

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)来进行实现。


目录
相关文章
|
JSON 前端开发 JavaScript
Webpack5新特性:使用 Assets Module 处理图片和字体资源
本文介绍了 Webpack5 的 Assets Module ,是其内置的用来处理图片字体文件等资源模块的新功能。相比与过去通过 loader 的方式去处理,更加方便和简洁。
1859 0
|
存储 Linux
Linux 配置 multipath 多路径
通常 Linux 主机挂载存储盘时,每次重启后对应的 /dev/sd* 都会变,而且不好辨识! 这时可以通过 multipath 多路径来绑定磁盘!
|
安全 网络协议 网络安全
|
3月前
|
存储 弹性计算 人工智能
阿里云服务器收费项目及收费标准解析,实例、存储、带宽最新收费标准
本文汇总了阿里云ECS最新收费标准,涵盖实例、块存储和带宽三大核心项目。实例方面,第九代c9i/g9i/r9i及AMD c8a等规格支持按量付费与包年包月(1/3/5年),如2核4G的c9i按量0.3873元/小时,包年5年低至3569.48元;96核192GiB的c8a包年5年约11.7万元。块存储ESSD AutoPL系统盘按量0.0021元/GiB/小时,包年1年约7.2-10.2元/GiB。带宽提供固定带宽和按流量两种模式,1Mbps按量0.0625元/小时,包年1年234.6元。整体来看,包年周期越长折扣越大,用户可根据业务需求灵活选择计费方式,实现成本最优。
|
4月前
|
弹性计算 安全 Linux
2026年阿里云服务器选型与网站部署全攻略:从服务器选型、配置到上线一站式指南
2026年阿里云服务器生态已形成轻量应用服务器与ECS云服务器两大核心体系,适配个人博客、企业官网、电商平台、应用开发等全场景建站需求。本文从服务器选型、配置选择、网站部署全流程、安全与运维优化四大维度,提供2026年最新实操指南,帮助用户精准选型、高效建站、稳定上线。
918 3
|
5月前
|
人工智能 监控 安全
Gemini API 生产限流治理:从单点调用到企业网关
企业接入 Gemini API,技术难点不是发出请求,而是把模型调用变成可治理的基础设施。网关、限流、审计、成本和供应弹性做好之后,AI 能力才适合长期运行。
292 0
|
11月前
|
Java Python
Python编程实战 - 面向对象与进阶语法 - 继承与多态
继承与多态是Python面向对象编程的核心,实现代码复用、扩展与灵活调用。子类可继承父类属性方法,并通过重写或super()实现多态,配合“鸭子类型”提升程序通用性与可维护性。
613 163
|
9月前
|
数据安全/隐私保护
银河麒麟V10安装glib2-devel-2.62.5-7.ky10.x86_64.rpm详细步骤
下载安装包并上传至服务器,进入存放目录,使用`yum`或`dnf`命令安装`glib2-devel`,注意需加`./`指定本地文件。安装后通过`rpm -qa | grep glib2-devel`验证是否成功。
|
算法
数论基础一一同余定理
同余定理是数论中的重要概念,用于判断两数对同一模数的余数是否相同,记作 \(a \equiv b \ (\text{mod } m)\)。其核心性质包括加减性和乘性,广泛应用于优化前缀和相关问题。本文通过三道例题详细解析同余定理的应用:1)蓝“k倍区间”,利用哈希表记录余数出现次数,将时间复杂度从 \(O(n^2)\) 降至 \(O(n+k)\);2)题“Subsequences Summing to Sevens S”,通过正序与倒序遍历寻找最长区间;3)AtCoder D题“Pedometer”,断环为链结合同余定理解决环形步数统计问题。这些实例展示了同余定理在算法竞赛中的高效应用。
815 0
|
数据采集 敏捷开发 存储
腾讯出品!这款Markdown神器让你码字效率翻倍,双模式编辑太香了!
由腾讯开源的CherryMarkdown编辑器,集思维导图式大纲写作与专业分屏模式于一身,支持实时预览、流程图绘制、多主题切换等硬核功能,助你轻松驾驭技术文档、博客写作、会议纪要等多种场景!
880 6

热门文章

最新文章