Go-Ethereum

Geth RPC 安全連接

  • January 15, 2020

我到處讀到,暴露personal在 rpc 上是危險的,而且很容易受到攻擊。問題是HOW?任何人都可以向我的 geth 控制台發送交易,如果我ipaddress和 geth 正在偵聽的埠受到損害?

其次,我不明白這是否是一種安全威脅,一些基於乙太坊的硬幣如何能夠提供自己的錢包?他們必須使用 RPC api 連接到 geth。他們的硬幣沒有風險嗎?

我還在為我的代幣建構一個網路界面,以便我的代幣web3.js使用者可以使用網路訪問他們的帳戶並進行交易,但為此我需要公開personalRPC我是否在損害安全性?如果是,我還能做些什麼來為我的帳戶使用者提供網路訪問。

-rpcaddr-rpccorsdomain以任何方式提供幫助?我無法正確理解它們的使用。如果我設置--rpcaddr "ip1", "ip2" --rpccorsdomain "ip1",這是什麼意思?

關於具體的 RPC 問題:

--rpcaddr是使用者的 geth rpc 伺服器正在監聽的地址。預設情況下它是本地主機。本地主機通常只能由在同一台電腦上發送消息的程序訪問,這通常是您想要的。如果您將其設置為公共 IP 地址,那麼任何人都可以連接到您的節點,如果該節點控制您的資金並且您告訴它讓人們通過網路發送請求來讓人們使用它,那麼這是非常糟糕的。

如果它在 localhost 上接受請求,則本地執行的任何程序都可以連接到它。但是,您的使用者信任本地電腦上執行的所有程序,對嗎?好吧,也許不是。第一個問題是任何其他應用程序都可以竊取他們的錢。但希望他們沒有下載任何會嘗試這樣做的狡猾的應用程序。但第二個問題是,他們的瀏覽器也在執行應用程序:不僅是您的應用程序,還有使用者正在訪問的任何其他站點的 JavaScript。

瀏覽器嘗試使用稱為同源策略的東西來處理這個問題。這意味著預設情況下,您只能編寫 JavaScript 來訪問您用來查看頁面的同一域和同一埠。即使這樣也有點噁心,因為您可以通過多種方式從瀏覽器發送數據,但並非所有方式都被阻止,而且整個設置具有相當大的攻擊面。但是人們有時想對這個策略做出例外,所以有一個叫做跨域資源共享(CORS)的東西,瀏覽器會詢問伺服器,“除了你自己,還有其他域+埠在那裡服務網頁你想讓我和你說話嗎?”。

這就是 Geth 所說--rpccorsdomain的。如果您希望瀏覽器與 geth 對話並且瀏覽器正在 localhost 上顯示來自 Web 伺服器的頁面,您至少必須指定 localhost 以及該伺服器所在的埠。如果您想為您域中的應用程序提供服務,他們必須告訴他們的 geth 讓您域中的頁面花錢。

這一切都是可怕的。呸。還有,啊。

任何擁有節點 IP 地址和埠的人都可以使用 RPC 提供程序——沒有身份驗證。它只是純文字 HTTP。至少有一次黑客攻擊,攻擊者通過 RPC 訪問了帳戶被解鎖的節點。

還有純粹基於文件系統的IPC提供程序。geth attach,預設情況下,使用 IPC,並且預設情況下 IPC 可以訪問每個 API。與嘗試保護 RPC 連接相比,使用 IPC 可能會獲得更好的成功。例如,Mist 使用 IPC。

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