我找不到合适的、简单的tx.origin漏洞修复方法,如果不使用任何修饰符,任何帮助都是非常感谢的,
谢谢,
PS: msg.sender不是我要找的(如果另一个合同调用您的合同,msg.sender将是合同的地址,而不是调用合同的用户的地址)
contract Proxy {
address myAddress;
function callMyContract() public view returns(address) {
MyContract(myAddress).doSomthing();
}
}
contract MyContract {
event Something(address sender);
function doSomthing() public (address) {
emit Something(msg.sender); // Proxy address
emit Something(tx.origin); // User address (the one I need) but vulnerable
}
}发布于 2019-10-24 00:13:38
tx.origin的漏洞来自于其语义本身,因此没有其他直接的选择。通常的建议是以不需要tx.origin的方式设计您的合同。
出发地:https://github.com/ethereum/solidity/issues/683:
如果需要tx.origin检查呼叫是否来自智能契约,则可以使用喜欢:
function isContract(address _addr) private returns (bool isContract){
uint32 size;
assembly {
size := extcodesize(_addr)
}
return (size > 0);
}https://ethereum.stackexchange.com/questions/76929
复制相似问题