所谓,知道别人所犯的错误,才能更好的避免犯错。下面是最近一段时间,Dapp被攻击所暴露出来的问题。
1、未检查 code == eosio.token
在EOS链上,任何人都可以发任何名称的币,也就是说黑客也可以创建EOS
,然后转给你换取真的币,这也就是所谓假币攻击。所以,在合约中接收币的时候,还需要判断来源,官方EOS来源就是eosio.token。
2、转账通知,未判断 to == _self
此前,我在测试的时候,发现别人的转账,自己是接收不到的。然后,在有些代码中漏掉了此处判断。后来,在查看EOS安全相关内容,才知道原来合约是可以设置接收人的,也就是说某个攻击合约接收到EOS时,然后通知你,你没有加上这句判断的话,那就会当做是某个人转EOS过来了。发现这个问题后,背后冷汗直流,赶紧检查了下,然后修复了这个BUG。
3、伪随机数
伪随机数被攻破,这是遇到安全事故最多的原因。因为,在EOS上,并不能产生真正的随机数,都是可以计算或者确定的数值,所以会被黑客预测出来。此时如何办?可以在服务器端,自己去取多个无法预测的随机种子来进行随机数的生成,不要使用确定的随机种子,也不要只使用时间戳做随机种子。
4、重放攻击
重放攻击就是黑客可以写一个合约来玩你的游戏,若是胜了,它就接收你的结果,若是失败了,就拒绝你的结果,导致整个交易失败。然后,让你的合约重新产生结果。这样,就能保证它100%胜率。
面对这种攻击,receipt之类的通知,可以采用异步的。同时,要保证失败了之后,下次产生的结果仍然是一样的。
网友评论