引言

最近 ETH 跌了,昨天晚上睡觉前看了一下自己的 ETH 钱包,结果看到一个转账通知,钱包内的 0.76 个 ETH 全部被转走了,转走的时间是前天晚上。

这篇文章主要是记录一下自己的经历,以及如何避免自己的钱包被盗。

事件经过

周五在学智能合约,写了一篇《使用 HardHat 创建 NFT 智能合约》的文章,然后按照教程把代码上传到 GitHub 了,并且开源了。没有特意的去检查代码的环境变量。

然后周六晚上发现自己的钱包的 ETH 被盗了,第一时间以为是自己授权钱包给了不安全的网站,导致被盗了,但是仔细检查了一下,发现 MetaMask 的交易记录并没有被盗的那条记录。

然后我去看 Github 代码,被盗的时间在代码最后一次提交的时间前,然后再一看代码,发现自己傻逼了,把自己的私钥放到了代码里面,然后提交到了 Github 上面。

仓库里面有一个 .env.example 文件,hardhat 初始化的时候生成 .gitignore 文件,里面有 .env,这一步是没问题的,但是我在创建 .env.example 的时候,使用的是 cp .env .env.example,这样就把私钥也复制到了 .env.example 文件里面,也没去删除里面的私钥,也没确认,就提交到了 Github 上面。

那个时候赶着下班,提交代码就走了。

如何避免

认识到钱包私钥的重要性

显然我之前对钱包私钥的重要性认识不够,导致了这次的损失。Web3 钱包的私钥(Private Key)非常重要。在区块链技术中,私钥就像是你的密码,具有以下重要性:

  • 访问权限:私钥是你访问和操作你的 Web3(例如以太坊)钱包中资产的唯一方式。有了它,你就可以发送交易,购买、出售或交换代币。
  • 安全保障:私钥必须保持私密,不应分享给任何人。任何拥有你私钥的人都可以访问并使用你的区块链资产。一旦私钥丢失,你可能无法恢复对你的资产的访问。这就是为什么许多人选择使用硬件钱包或其他安全措施来存储他们的私钥。
  • 不可更改:一旦生成私钥,就不能更改。这确保了任何人都不能篡改你的交易记录或资产。
  • 无法找回:如果你丢失了私钥,那么几乎没有办法找回。这就是为什么备份你的私钥非常重要。

所以,保存好你的 Web3 钱包私钥并保证其安全是非常重要的,丢失或泄露私钥可能会导致你的资产被盗。

区分钱包

在使用 Web3 钱包的时候,一定要区分好钱包,你可以创建多个钱包,用于不同的场景,比如一个专门用来存储资产,一个专门用来开发测试,一个专门用来交易等等。

储存资产的钱包一定要保证私钥的安全,也不要乱授权,推荐使用硬件钱包来保证你的私钥安全。

环境变量

在开发的时候,一定要注意环境变量的安全,不要把私钥等重要信息放到代码里面,也不要提交到 Github 上面。特别是开源项目,一定要注意。我能想到的方案:

  • 可以养成先创建私有仓库,然后再创建公开仓库的习惯。
  • 在提交代码的时候,检查一下代码改动,确认没有私钥等重要信息。
  • 本地安装 git-secrets, 配合 git 钩子,可以在提交或者 push 前自动扫描代码,看看有没有问题,很方便。(推友方案)

总结

这次事件,让我对 Web3 钱包的私钥有了更深的认识,也让我意识到了环境变量的重要性,以后一定要注意。周五的那篇文章价值 0.76 个 ETH,心在滴血。

希望大家能够引以为戒,不要重蹈我的覆辙。如果我的文章对有帮助到你,可以考虑打赏安慰一下我,非常感谢 🙏。

  • TRC:TRdBDpuSVffHfAD33SFVyc62hZe79msdcd
  • ETH:0xc1a3C8DF608F8D4a321fEC13e968327ccFd0bf74

附上学习资料:《区块链安全入门笔记》