值得关注的其他问题
尽管有一个安全问题排名很不错,但它往往一些有趣的细节,因为某些细节与排名列表并不完全一致。在深入挖掘10大问题之前,必要阐述一下原始研究中一些值得关注的亮点问题:
在2018年,最主要的两个问题是外部合约拒绝服务和重入。但是现在这些问题有所缓解。可以从我们的研究博客中了解更多有关Reentrancy的信息:从安全角度出发审视智能合约。
译者注:实际上由于DeFi应用之间的组合应用,又导致了多起严重的重入攻击事件。
现在Solidityv0.6.x发布了,它带来了许多重大变化,然而扫描的智能合约中有50%甚至还没有准备好使用Solidityv0.5.0编译器。另外30%智能合约使用了过时的语法,并且83%的合约在指定编译器版本存在规范问题。
Arbitrum链上智能合约创建总量突破250万,锁仓总量超50亿美元:金色财经报道,据Dune Analytics最新数据显示,以太坊Layer2网络Arbitrum链上智能合约创建总量突破250万,本文撰写时达到2,508,321个,锁仓总量为50.62亿美元,累计链上ERC-20资产总价值达到92.2亿美元。历史数据显示,Arbitrum链上智能合约创建总量于2022年11月底突破100万,4月中旬超200万,这意味着该指标过去一个月时间内增长约25%。[2023/5/27 9:45:55]
译者注:Solidity0.6在语义上更明确了,有助于编译器及时发现问题,让代码更安全,
尽管可见性问题没有出现在2018年的前10位,也没有出现今年的前10,但可见性问题增加了48%,值得关注。
下表比较了2018年和2020年十大常见问题列表之间的变化。这些问题按严重程度和流行程度排序:
首个利用RGB智能合约的比特币NFT市场DIBA在主网启动:金色财经报道,首个利用RGB智能合约的比特币NFT市场 DIBA(Digital Bitcoin Art and Assets)在主网启动,此次发布还包括比特币钱包 BitMask,这是一种“仅限比特币”的加密钱包,可以持有音乐和艺术数字资产。
据报道,DIBA的支持者包括 Draper Associates 创始人 Tim Draper、ACTAI Unicorn Fund 联合创始人 Bill Tai、NIMA Capital 投资人 Yasmeen Drummond 和 Martial Eagle Fund CEO及联合创始人 Erez Kalir 。[2023/5/19 15:13:00]
1.未检查的外部调用
在2018年Solidity十大安全问题榜单上未检查的外部调用是第三个常见问题。由于现在前两个解决了,因此未检查的外部调用成为了2020年更新列表中最常见的问题。
Astar宣布其WASM智能合约赏金提案已获得批准:金色财经报道,Astar表示,其WASM智能合约赏金提案已获得批准,团队联盟将鼓励、促进、采用和开发Polkadot平行链上的Web Assembly智能合约。[2023/3/5 12:42:44]
Solidity底层调用方法,(例如
address.call()
)不会抛出异常。而是在遇到错误,返回
false
。
而如果使用合约调用
ExternalContract.doSomething()
时,如果
doSomething()
抛出异常,则异常会继续「冒泡」传播。
应该通过检查返回值来显式处理不成功的情况,以下使用
addr.send()
进行以太币转账是一个很好的例子,这对于其他外部调用也有效。
以太坊基金会开发人员提议推出智能合约保险基金:据ccn消息,以太坊基金会的开发人员,Mist浏览器团队负责人Alex Van de Sande在一篇博客文章中发布了一份关于保险库的建议,他认为这将减轻以太坊网络拆分的风险,这是因为存在恢复由于智能合约中的代码故障而被冻结的资金的希望。开发人员可以通过在头几年锁定一部分“补救合约”的以太坊为智能合约投保,作为交换,他们可以收到等额的“补救性以太通证。”人们可以持有或者交易该通证。如果智能合约出于黑客攻击或者其他原因冻结了以太坊,那么人们便可以90%的比例等额从保险池里兑换他们的通证。此前,智能合约的错误代码造成了资金冻结。而因为代码错误,造成了Parity钱包合约的损毁并不得不采取分叉形式帮助用户弥补损失。[2018/4/29]
if(!addr.send(1)){revert(。
2.高成本循环
高成本循环从Solidity安全榜单的第四名上升至第二名。受该问题影响的智能合约数量增长了近30%。
FUTchain燃料链利用智能合约 数字化管理和分配实体燃料:FUTchain燃料链是实体燃料数字化管理分配解决方案。中平德能源科技通过城市污水,垃圾渗滤液,工业污水等废料,通过添加特殊培育的微生物发酵制成HTF高效能源燃料。同时将区块链技术和实体资产有机结合,利用智能合约等互信机制用于实体燃料的数字化管理和分配,推出燃料链FUT。[2017/12/27]
大家都知道,以太坊上的运算是需要付费的。因此,减少完成操作所需的计算,不仅仅是优化问题,还涉及到成本费用。
循环是一个昂贵的操作,这里有一个很好的例子:数组中包含的元素越多,就需要更多迭代才能完成循环。最终,无限循环会耗尽所有可用GAS。
for(uint256i=0;i<elements.length;i++){//dosomething}
如果攻击者能够影响元素数组的长度,则上述代码将导致拒绝服务(执行无法跳出循环)。而在扫描的智能合约中发现有8%的合约存在数组长度操纵问题。
3.权力过大的所有者
这是Soldiity十大安全问题新出现的问题,该问题影响了约16%的合约,某些合约与其所有者紧密相关,某些函数只能由所有者地址调用,如下例所示:
只有合约所有者能够调用
doSomething()和doSomethingElse()
函数:前者使用onlyOwner修饰器,而后者则显式执行该修饰器。这带来了严重的风险:如果所有者的私钥遭到泄露,则攻击者可以控制该合约。
4.算术精度问题
由于使用256位虚拟机,Solidity的数据类型有些复杂。Solidity不提供浮点运算,并且少于32个字节的数据类型将被打包到同一个32字节的槽位中。考虑到这一点,你应该预见以下程序精度问题:
functioncalculateBonus(uintamount)returns(uint){returnamount/DELIMITER*BONUS;}
如上例所示,在乘法之前执行的除法,可能会有巨大的舍入误差。
5.依赖tx.origin
6.溢出
Solidity的256位虚拟机存在上溢出和下溢出问题,这里有具体的分析。在
for
循环条件中使用
uint
数据类型时,开发人员要格外小心,因为它可能导致无限循环:
7.不安全的类型推导
该问题在Solidity十大安全问题排行榜中上升了两位,现在影响到的智能合约比之前多了17%以上。
8.不正确的转账
此问题在Solidity十大安全问题榜单中从第六位下降到第八位,目前影响不到1%的智能合约。
9.循环内转帐
当在循环体中进行以太币转账时,如果其中一个转账失败,那么整个交易将被回滚。
for(uinti=0;i<users.lenghth;i++){users.transfer(amount);}
在这个例子中,攻击者可能利用此行为来进行拒绝服务攻击,从而阻止其他用户接收以太币。
10.时间戳依赖
如果你的应用需要随机性,可以参考RANDAO合约,该合约基于任何人都可以参与的去中心化自治组织,是所有参与者共同生成的随机数。
总结
比较2018年和2020年十大常见问题时,我们可以观察到开发最佳实践的一些进展,尤其是那些影响安全性的实践。看到2018年排名前2位的问题:外部合约拒绝服务和重入,已经不再榜单了,这是一个积极的信号,但仍然需要采取措施来避免这类常见错误。
请记住,智能合约在设计上是不可变的,这意味着一旦创建,就无法修补源代码。这对安全性构成了巨大挑战,开发人员应利用可用的安全测试工具来确保在部署之前对源代码进行了充分的测试和审核。
Solidity是一种非常新且仍在成熟的编程语言,Solidityv0.6.0引入了一些重大更改,并且预计在以后的版本中还会有更多更改。
数字货币隔夜消息一览 1.SEC已否决WilshirePhoenix的比特币ETF提案。2.隔夜BTC一度跌破8700美元,ETC、EOS、BSV等币种24h跌幅均超14%.
1900/1/1 0:00:00作者:刘晓曙,青岛银行首席经济学家 8月14日,商务部印发了《全面深化服务贸易创新发展试点总体方案》,公布了28个全面深化试点地区.
1900/1/1 0:00:00编辑|门人 作者|indigo 原标题:《主网上线前夕,一文读懂DFINITY生态发展》DFINITY主网正式上线了。时隔6年,曾经的天王级公链进入了新的发展阶段.
1900/1/1 0:00:00投资理财是指投资者通过合理安排资金,运用诸如储蓄、银行理财产品、债券、基金、股票、期货、外汇、房地产、保险以及黄金等投资理财工具对个人、家庭和企事业单位资产进行管理和分配,达到保值增值的目的.
1900/1/1 0:00:00根据TheBlockResearch跟踪的若干指标,比特币或者说加密货币距离大规模应用还有很长的路要走.
1900/1/1 0:00:00在关于比特币历史关键时刻的系列文章的第二部分中,我们将研究导致选择独特符号和相应徽标的情况。正如互联网记录显示的那样,最初的比特币标识是比特币中为数不多的非技术方面之一,其中中本聪有发言权.
1900/1/1 0:00:00