You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity view函数通过web3修改call参数from绕过msg.sender校验如何修复?

这是正常现象,不存在安全风险

你观察到的是call()方法的固有特性,不需要担心所谓的“绕过校验”带来的实际安全问题:

  • call()是本地节点执行的只读模拟调用,不会将交易广播上链,节点只会按照你传入的from参数设置模拟执行环境里的msg.sender,不会校验你是否持有对应地址的私钥。
  • 这类模拟调用仅能拿到view/pure函数的返回值,无法修改链上任何状态。真正需要修改链上状态的签名交易(send类交易),必须用对应地址的私钥签名才能广播,就算攻击者修改了代码里的from变量,没有私钥也无法完成交易,链上的require校验会正常生效。

修复方案

你不需要针对这个特性做额外修复,只要遵循两个开发原则即可:

  1. 不要在链上存储任何需要保密的敏感信息:以太坊所有链上数据都是公开可查的,哪怕你给view函数加了msg.sender校验,攻击者也可以直接通过读取合约存储插槽拿到对应数据,不需要调用你的函数。
  2. 所有涉及权限校验的状态修改操作,不要声明为view/pure,走正常的签名交易流程即可,原生的交易签名机制已经能保证msg.sender无法伪造。

内容的提问来源于stack exchange,提问作者Daniel Rayos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:54:02