Kann man das Exponieren von Personen trotzdem absichern?

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.

Richten Sie einen Proxy ein, um alle Anforderungen für Ihren lokalen Knoten zu verarbeiten. Wenn Sie auf nodejs sind, verwenden Sie github.com/nodejitsu/node-http-proxy
Sie müssen eine Middleware erstellen. Dies sind sehr spezifische Anforderungen, die web3 nicht unterstützt. Sie müssen Ihre eigene API erstellen, die ihre eigene Transaktionsvalidierung und -authentifizierung durchführt, und dann können Sie einfach IPC verwenden, um Transaktionen sicher an Ihren Knoten zu senden
Du meinst, ich muss für so etwas wie web3 codieren??? Ich kann web3 verwenden, um jede Aufgabe auszuführen, die ich benötige, aber ich möchte wissen, wie ich es sicherer machen kann?
Außerdem wirft die Frage ein zweites Szenario auf, dass RPC unsicher ist (mit oder ohne Personal). Was ist damit. Soll ich eine weitere Frage für den zweiten Fall aufwerfen

Antworten (1)

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.

Vermutlich, wenn Prashants Konto Ether enthalten muss, muss er dieses Konto manchmal entsperren, um alles zu tun, was Zugriff auf sie benötigt, also wird ein starkes Passwort nicht ausreichen.
Sie können die signAndSendTransaction (kürzlich umbenannt) verwenden, die Ihr Konto im Allgemeinen nicht entsperrt – siehe ethereum.stackexchange.com/questions/7196/… .
@BookyPoohBah Wie kann ich personal.sendTransaction verwenden, wenn ich eine Transaktion über RPC senden muss. Es gibt keine Funktion wie web3.personal.sendTransaction(). Diese Funktion funktioniert nur von der Geth-Konsole aus.
@PrashantPrabhakarSingh Sie haben Recht, dass es nicht in der aktuellen Version von enthalten ist 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.