我有一些关于如何使用web3控制de msg.sender的经验。
例如,我在solidity中有这个函数:其中msg.sender是costructor中使用的所有者。例如为0x9;
function NoPass() external view returns(string memory){
require(msg.sender == owner, "NO ERES EL PROPIETARIO");
return "HACKEADO";}然后从JS调用此函数,如下所示:
contract.methods.NoPass().call({from:"0x9"}).then(res=>{
console.log(res);})我可以调用这个函数并跳过require,因为我的调用与owner写的是相同的帐户。我怎么才能修复它?因为我将帐户保存在一个值中,所以黑客可以修改这个帐户值并跳过要求。
谢谢,我是个发送函数的新手,它只是调用函数,但是这是正常的吗?
发布于 2021-09-21 07:52:11
call()函数读取区块链状态,并且不更改区块链的状态。send()创建事务并可以更改区块链状态。访问控制通常仅在可更改区块链状态的功能中实施。此外,使用OpenZeppelin Ownable.sol进行访问控制也很好。
https://stackoverflow.com/questions/69261417
复制相似问题