欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

合约常见漏洞和代码风险

程序员文章站 2022-03-01 20:17:27
...
常见漏洞
1.在做运算时有可能导致uint256溢出,验证的时候可以通过,实际会导致账户增加大量token,所以最好在运算时使用safemath库
2.重入攻击,利用转账会触发fallback,再次"提现",而提现函数中先触发转账,没有及时更新数据库导致被重入,一般使用标致位或先修改数据库
3.访问权限控制,要注意各修饰符中的逻辑正确性,避免bug导致权限校验失败
4.尽量避免跨合约调用,有一些经常被调用的函数要设置成合约不可调用,如限制msg.sender和tx.origin为同一个地址
5.在使用随机数的时候尽量避免随机数的直接获利,如果一定要使用随机数"开大奖",则最好使用chainlink的vrf随机数,在区块链上真随机和速度无法兼顾
7.短地址攻击,在转账的时候先生成一个00结尾的地址,然后在调用转账的时候,地址不传结尾的00,导致自动补0,而金额也会向前移2位,导致多转了256*n个token

代码风险
1.关键代码前有超长空格 
2.父类和子类有同名变量,这个变量在子类用的其实是自己的,而修饰符的权限校验很有可能用的是父类的变量
3.编译器版本不能太低,0.4是有明显的bug,未初始化的结构体局部变量赋值时,会直接覆盖智能合约定义的前几个变量
4.var默认用是的uint8,在for循环时很有可能溢出,造成某些判定成功