运行 public 以太坊节点安全吗?

Is it secure to run public ethereum node?

我正在用松露创建我的第一个以太坊合约。我希望 Web 应用程序可以在没有 MetaMask 的情况下使用,所以我想知道 运行 我自己的私有节点是否是个好主意并 像这样从前端连接:

this.web3 = new Web3(new Web3.providers.HttpProvider('http://my-public-ip:8545'));

这种方法是否存在任何安全风险?

我正在回答我自己的问题,因为似乎很多人都犯了和我一样的错误并且失去了他们的以太币!

  1. 我设置了public这样的可访问节点:

    geth --mine --nodiscover --maxpeers 0 --networkid 1 --rpc --rpccorsdomain "*" --rpcaddr "my-public-ip" --rpcapi="db,eth,net,web3,personal,web3"

  2. 我创建了新的以太坊账户,它将成为我的 "contract owner" 账户

  3. 我在 "contract owner" 账户中转了少量以太币,这样我就有足够的 gas 来部署我的新合约
  4. 我确实设置了 truffle 以连接到我的以太坊节点
  5. 我使用 truffle console 解锁了我的账户
  6. 我遇到错误 "Error: exceeds block gas limit"

此时我很困惑,因为我在 etherscan 上看到我的账户中有大约 10 美元的以太币,应该足以部署我的合约

我再次检查了 etherscan,我看到 "outgoing" 交易从以太坊地址中耗尽了我所有的钱

经过一番研究,钱是这样被偷走的:[​​=12=]

  1. 一个机器人发现了我的 public 以太坊节点
  2. 已连接并请求账户列表+账户余额
  3. 它开始不停地发送 "sendTransaction" 请求
  4. 当我在 public 节点上解锁我的账户以部署我的合约时 - 使用同一节点的机器人也可以访问我的账户并从我的账户中转移资金

我写这篇文章是为了防止其他开发人员犯同样的错误。机器人地址是: https://etherscan.io/address/0x957cd4ff9b3894fc78b5134a8dc72b032ffbc464#comments

有大量评论说以太币被盗了。而且我不是在谈论我的 10 美元,到目前为止机器人已经偷走了:

ETH Balance:    37,070.060208365548676156 Ether
ETH USD Value:  ,642,974.23 (@ 8.96/ETH)

这应该在 Whosebug 上,因为我在遵循网络教程时遇到了这种情况,但没有人解释风险和可能发生的情况