当前位置:百科伴 >

科普

> Solidity常见的安全问题有哪些?

Solidity常见的安全问题有哪些?

Solidity常见的安全问题有哪些?

Solidity常见的安全问题具体如下:

1、外部调用未检查。

在2018年Solidity十大安全问题榜单上未检查的外部调用是第三个常见问题。目前前两个都已经解决了,因此未检查的外部调用成为了2020年更新列表中最常见的问题。

Solidity 底层调用方法,(例如 ())不会抛出异常。而是在遇到错误,返回 false。

如果使用合约调用 mething()时,如果 doSomething()抛出异常,则异常会继续“冒泡”传播。

2、高成本循环。

高成本循环从Solidity安全榜单的第四名上升到了第二名。受该问题影响的智能合约数量增长大约30%。

用户都知道,以太坊上的运算是需要付费的。因此,减少完成操作所需的计算,不仅仅是优化问题(效率),还涉及到成本费用。

3、权力过大的所有者。

这是Soldiity十大安全问题新出现的问题,该问题影响了约大概16%的合约,某些合约与其所有者(Owner)紧密相关,某些函数只能由所有者地址调用。

4、算术精度问题。

由于使用 256 位虚拟机(EVM),Solidity 的数据类型有些复杂。 Solidity 不提供浮点运算, 并且少于 32 个字节的数据类型将被打包到同一个 32 字节的槽位中。

5、依赖 in。

智能合约不应该依赖于 in 进行身份验证,因为恶意的合约可能会进行中间人攻击,然后耗尽所有资金,建议改用 er。

6、溢出(Overflow / Underflow)。

Solidity 的 256 位虚拟机存在上溢出和下溢出问题。在for循环条件中使用uint数据类型时,开发人员务必要小心,因为它可能导致无限循环。

7、不安全的类型推导。

该问题在 Solidity 十大安全问题排行榜中也上升了两位,现在影响到的智能合约比之前超了17%以上。

Solidity 支持类型推导,但有一些奇怪的表现。例如,字面量0会被推断为byte类型,而不是通常期望的整型。

8、不正确的转账。

此问题在 Solidity 十大安全问题榜单中从第六位下降到了第八位,目前影响不到1%的智能合约。

在合约之间进行以太币转账有多种方法。虽然官方推荐使用 sfer(x) 函数,但我们仍然找到了还在使用 send()函数的智能合约。

9、循环内转帐。

当在循环体中进行以太币转账时,如果其中一个转账失败(例如,一个合约不能接收),那么整个交易将被回滚。

10、时间戳依赖。

在 2018 年,时间戳依赖问题排名第五,重要的是要记住,智能合约在不同时刻多个节点上运行的。以太坊虚拟机(EVM)不提供时钟时间,并且通常用于获取时间戳的 now 变量(stamp 的别名)实际上是矿工可以操纵的环境变量。

标签: Solidity
  • 文章版权属于文章作者所有,转载请注明 https://www.baikeban.com/kpbk/1vdv1m.html