FISCO BCOS十二、通过Truffle和remix复现智能合约的溢出漏洞(以及修复方法)

一、分析

1、前置知识

上一篇我写了智能合约的重入攻击漏洞,这一篇让我们来了解一下合约另外一个漏洞--溢出漏洞。

首先我们来看看溢出是什么:

溢出(overflow) 分为两种上溢和下溢:所谓上溢是指在运行单项数值计算时,当计算产生出来的结果非常大,大于寄存器或存储器所能存储或表示的能力限制就会产生上溢,例如在 solidity 中,uint8 所能表示的范围是 0 - 255 这 256 个数,当使用 uint8 类型在实际运算中计算 255 + 1 是会出现上溢的,这样计算出来的结果为 0 也就是 uint8 类型可表示的最小值。同样的,下溢就是当计算产生出来的结果非常小,小于寄存器或存储器所能存储或表示的能力限制就会产生下溢。例如在 Solidity 中,当使用 uint8 类型计算 0 - 1 时就会产生下溢,这样计算出来的值为 255 也就是 uint8 类型可表示的最大值。

2、漏洞合约

pragma solidity ^0.7.6;

contract TimeLock {
    mapping(address => uint) public balances;
    mapping(address => uint) public lockTime;

    function deposit() external payable {
        balances[msg.sender] += msg.value;
        lock

猜你喜欢

转载自blog.csdn.net/qq_63235624/article/details/134361865