智能合约安全:访问控制漏洞攻击

访问控制漏洞是指未能仔细检查合约中函数或变量的访问权限,从而允许恶意攻击者能够进入本不该被其访问的函数或变量。

访问控制漏洞不是智能合约特有的问题,而是所有计算机系统普遍存在的问题。

说到访问控制漏洞,我们就不得不提一家名叫Parity的英国公司。它的创始人Gavin Wood 在区块链领域实在是太有名了。

Gavin,被称为以太坊的隐形大佬,擅长英语、意大利语、法语、西班牙语、逻辑语, 是著名桌游Milton Keynes的设计者,计算机科学博士、视觉音乐博士。

Gavin博士是以太坊联合创始人兼首席技术官。我们知道,以太坊最早是由“V神”提出的想法,但真正实现并搭建起以太坊基础的人,却是Gavin。他不仅编写了以太黄皮书,而且一个人写完了最早C++版的以太坊客户端。他还设计开发了我们正在使用的solidity语言。

Gavin创立的Parity公司,现在成为了区块链跨链技术的巨头,设计开发了大名鼎鼎的波卡跨链系统。

就是这么牛叉闪闪、可以横着走路的人,却栽在了一个小小的访问控制漏洞上。

出现访问控制漏洞,多数原因却是管理问题,随手失误。这个问题虽小,但危害巨大。

访问控制漏洞是指未能仔细检查合约中函数或变量的访问权限,从而允许恶意攻击者能够进入本不该被其访问的函数或变量。

访问控制漏洞不是智能合约特有的问题,而是所有计算机系统普遍存在的问题。

solidity智能合约的访问控制体现在两个方面:

第一,代码层面的可见性

第二,逻辑层面权限约束

Rubixi缺陷代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Rubixi {
 
        //Declare variables for storage critical to contract
        uint private balance = 0;
        uint private collectedFees = 0;
        uint private feePercent = 10;
        uint private pyramidMultiplier = 300;
        uint private payoutOrder = 0;
 
        address private creator;
 
        //Sets creator
        function DynamicPyramid() {
            creator = msg.sender;
        }
}

解决方案

  • 遵守开发管理流程,代码要进行评审
  • 测试要充分,至少使用漏洞分析工具过一遍

下一章:web3开发:前端开发 ethers.js

web3开发:前端使用ethers.js调用Hello智能合约。hello.sol 智能合约文件:// SPDX-License-Identifier: MITpragma solidity 0. ...