智能合约安全之笔误安全问题怎么办(智能合约解决什么问题)

文章前言

当已定义操作的意图是将一个数字与变量求和(+=),但意外地使用了错误的操作(=+)就会出现笔误,而这恰好是有效的操作符,这不是计算总和,而是再次初始化变量,一元+运算符在新的Solidity编译器版本中已弃用。

漏洞示例

示例合约如下所示:

    pragma solidity ^0.4.25;
    contract TypoOneCommand { uint numberOne = 2;
    function alwaysOne() public returns(uint a){ return numberOne =+ 1; }}

    编译并部署合约之后调用alwaysOne来进行简易测试,可以看到此时的numberOne被初始化成了1:

    防御措施

    1、所有的数值运算操作全部采用SafeMath来实现

    2、使用最新的编译器,最新版本编译器会自动检测是否存在类似的安全问题

    参考链接

    https://github.com/ethereum/solidity/issues/1760

    https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol

    凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字凑数字

    原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34121.html

    (0)
    七芒星实验室's avatar七芒星实验室
    上一篇 2024年4月11日 下午10:59
    下一篇 2024年4月12日 上午6:00

    相关推荐

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注