880195

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

Solidity常见的安全问题有哪些?知道的帮忙回答一下,谢谢。

  • 我爱卡 2021.05.11 1209

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

    1、外部调用未检查。

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

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

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

    2、高成本循环。

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

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

    3、权力过大的所有者。

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

    4、算术精度问题。

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

    5、依赖 tx.origin。

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

    6、溢出(Overflow / Underflow)。

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

    7、不安全的类型推导。

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

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

    8、不正确的转账。

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

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

    9、循环内转帐。

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

    10、时间戳依赖。

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

    更多精彩内容来我爱卡社区
    进入贷款讨论区

显示更多答案

大家都爱看

贷款推荐 更多贷款

吉客有钱

息费透明,合规极速到账

51人品贷

大额贷易通过,下款快

哈啰

循环额度,极速借款

好会借

凭身份证申请,当天下款

我爱卡

要用钱、上我爱卡 年化18%

申请更多

办卡推荐

更多卡片
  • 新手入门卡

    民生银行标准信用卡

    免费申请
  • 新手入门卡

    工银World奋斗郎平信用卡

    免费申请
  • 广发真情卡

    免费申请
  • 积分抵现

    浦发华润通联名信用卡

    免费申请
  • 互联网专享

    兴业淘宝网联名信用卡

    免费申请
  • 刷卡免年费

    华夏标准信用卡

    免费申请
  • 光大海航海免联名信用卡

    免费申请
更多
  • 卡友还看过的问题
  • 最新问题
  • var copyright = document.getElementsByClassName('copyright')[0]; var year = new Date().getFullYear(); copyright.innerHTML = `© 2005-` + year + ` m.51credit.com`;