智能合约巧解钓鱼网站

1,435 阅读1分钟

前言

  • 今天与同事讨论了一个关于钓鱼网站的问题,目前巧思一个解决方式,记录下这个小机灵

问题

  • 由于公司目前较多中老年客户入坑区块链,他们对钓鱼网站的防范意识稍弱些。例如:官网是 http://www.laidawoyabendan.com,在一个挂白群中,钓鱼佬发出如 http://www.laidawoyabenban.com 的钓鱼网站。客户疏忽而进入网站,在钓鱼网站授权一定数量的代币给钓鱼佬后,所授权的代币也就直接空城了。

钓鱼.png

解决方式

  • 根本的问题是域名可自选,相似的域名会让人疏于防范,从而被钓。

  • 我们都知道,区块链具有不可篡改性。智能合约部署后,地址也就确定了,我们可以利用这个特性,将智能合约网址当做安全跳板。官网信息存储在智能合约中,给上 public 修饰符(所有人都可以获取官网地址),仅发布者拥有修改权限。

  • 客户只需存储 https://etherscan.io/address/0xB8c77482e45F1F44dE1745F52C74426C631bDD52 并记忆前四位(0x后四位)的智能合约地址。因合约地址最终是由 HASH 函数得出的结果,而记忆前四位的钓鱼合约理论需碰撞 65536 次(16 ** 4),指数级增加钓鱼难度。当钓鱼佬发出如 https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7 的钓鱼合约时,客户只需核对合约地址前四位,即可防钓。

  • 防呆不防傻!

傻.png

代码实现

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

contract BD {
    string public officialWebsite;
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    function setOfficialWebsite(string memory _os) public returns (bool) {
        require(msg.sender == owner, "No permission"); // 只允许发布者修改
        officialWebsite = _os;
        return true;
    }
}