我已经使用ERC223令牌标准编写了基本ICO的智能合约。 当我验证securify.ch(https://securify.chainsecurity.com/)中的代码时,它显示了一些安全错误。这是我遇到这些错误的代码
代码:
function transfer(address _to, uint _value, bytes _data) public {
uint codeLength;
assembly {
codeLength := extcodesize(_to)
}
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
if(codeLength>0) {
ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
receiver.tokenFallback(msg.sender, _value, _data);
}
emit Transfer(msg.sender, _to, _value, _data);
}
在下面一行中,我得到了错误。
receiver.tokenFallback(msg.sender, _value, _data);
错误:此合同允许任意用户代表合同执行不受信任的代码。这是因为任何用户都可以提交作为该方法的参数提供的任意地址_spender
和任意数据_data
。地址支出者确定调用指令的目标,而_data
确定不受信任合同中调用的函数。