Go-Ethereum

為什麼暴露個人 API 是不安全的?

  • July 4, 2016

從我在 hereherehere等各個地方閱讀的內容來看,通過RPC將個人api暴露給前端Dapp是不安全的。

因此要求使用者執行geth --rpc --rpcapi "eth,net,web3,personal" --rpccorsdomain "http://yourDomain是不安全的。

我的問題是為什麼會這樣?我的印像是我通過它提供了光澤的連結,但我仍然有點不清楚。

謝謝!

編輯

從答案中,我想擴展/澄清一下我的困惑:

使用者登錄到他的電腦並geth --rpc --rpcapi "eth,net,web3,personal" --rpccorsdomain "http://yourDomain.com"在終端上打字。

這使他的節點能夠收聽http://yourDomain.com。然後他打開瀏覽器並訪問位於 的 Dapp http://yourDomain.com

然後確定他可以弄亂自己的節點和帳戶,但是外部攻擊者如何做到這一點?

  1. 資訊披露:personal.listAccounts,會告訴節點包含哪些地址(外部賬戶)。
  2. 蠻力:不斷要求解鎖帳戶$$ personal.unlockAccount() $$通過使用listAccounts(上述函式),隨機鎖定現有帳戶(personal.lockAccount)。無意中DoS攻擊
  3. 不必要的帳戶創建:personal.newAccount(),繼續創建帳戶,可能有數十億個,這樣您的伺服器空間就會被填滿(geth 在帳戶創建時創建密鑰庫文件)

更新:

誰能做黑客?

答:任何人,有惡意。

有人如何能夠執行上述任務?

回答:從他的瀏覽器控制台,他可以執行以下操作。

    var Web3 = require('web3');
        var web3 = new Web3();
        web3.setProvider(new web3.providers.HttpProvider("http://yourDomain"));
for(i=0;i<100000000;i++){
web3.personal.newAccount(/*some random function*/);
}// There the hacker could able to create 100000000 many accounts in your server.
web3.eth.defaultAccount="0xHackersOwnAccount"; //As the hacker knows somehow all incoming money transfer is to your default account, but alas !!  no more

我希望我沒有教錯人。

引用自:https://ethereum.stackexchange.com/questions/6765