Go-Ethereum
為什麼暴露個人 API 是不安全的?
從我在 here、here或here等各個地方閱讀的內容來看,通過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
。然後他打開瀏覽器並訪問位於 的 Dapphttp://yourDomain.com
。然後確定他可以弄亂自己的節點和帳戶,但是外部攻擊者如何做到這一點?
- 資訊披露:personal.listAccounts,會告訴節點包含哪些地址(外部賬戶)。
- 蠻力:不斷要求解鎖帳戶$$ personal.unlockAccount() $$通過使用listAccounts(上述函式),隨機鎖定現有帳戶(personal.lockAccount)。無意中DoS攻擊
- 不必要的帳戶創建: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
我希望我沒有教錯人。