Ich weiß, dass das Offenlegen von Personal über RPC anfällig ist. Aber gibt es eine Möglichkeit, die persönliche Offenlegung über RPC sicher zu machen?
Lassen Sie mich meine Anforderung formulieren. Ich habe eine Kryptowährung bereitgestellt. Jetzt möchte ich seine Funktionen als API verfügbar machen.
Aber dafür muss ich Personal über RPC freigeben, um Transaktionen durchzuführen. Für zB. Um auszuführen transfer
, kann ich folgenden Code schreiben:
function transferCoin(to, amount,frm, passphrase){
web3.personal.unlockAccount(frm,passphrase);
var tx=contract1.transfer(to, amount, {from: frm});
}
Problem:
Aber wenn sich jemand mit meinem Knoten verbinden kann, kann er persönlich missbrauchen und mein Konto leeren.
Bearbeiten:
Als ich die Frage schrieb, wurde mir klar, dass es nicht nur um persönliche, sondern auch um RPC geht, die unsicher sind. Betrachten wir zum Beispiel einen Fall, in dem persönliche Daten nicht über rpc verfügbar gemacht werden. Aber wenn sich jemand über rpc mit meinem Knoten verbinden kann, kann er eine Funktion wie die folgende ausführen:
function EtherTransfer(){
while(true){
//console.log("hello");
web3.eth.sendTransaction({from:"addr1", to:"addr2", value: web3.toWei(100,"ether")});
}
};
und trage alle meine Äther.
Gibt es also eine Lösung für das Problem. Wie ich in meiner Anforderung angegeben habe, muss ich Personal über RPC verfügbar machen, um APIs meiner Vertragsfunktionen für meine andere Anwendung bereitzustellen.
Bevor Sie Transaction senden, müssen Sie unlockAccount mit Ihrer Passphrase ausführen, sodass die Schwachstelle hauptsächlich durch Ihre schwache Passphrase verursacht wird, nicht zu sehr durch die exponierte Schnittstelle.
web3.personal.sendTransaction()
. Diese Funktion funktioniert nur von der Geth-Konsole aus.geth
. Es ist für JSON-RPC unter github.com/ethereum/go-ethereum/wiki/… dokumentiert , ist aber immer noch ein ausstehendes Problem Nr. 2 , das in implementiert werden muss geth
.
Badr Bellaj
Tjaden Hess
Prashant Prabhakar Singh
Prashant Prabhakar Singh