Wie überprüft web3.js, ob es Geth ist, das Port 8545 abhört?

Da mehrere Webanwendungen entstehen, die im Wesentlichen Front-Ends für dapps sind, werden RPC-Aufrufe an localhost-Port 8545 getätigt (angeblich von web3.js, das im Webclient ausgeführt wird). Diese Ortsgespräche werden sogar von Websites getätigt, die auf öffentlichen URLs gehostet werden, was bei den allermeisten sicheren Web-Apps nicht vorkommt.

Obwohl die Benutzer wissen, dass sie „geth auf meinem Computer ausführen müssen“, verstehen sie möglicherweise nicht vollständig, dass dies geschieht oder welche Auswirkungen dies auf die Sicherheit hat. Wenn „etwas anderes“ als Geth oder ein anderer gültiger Ethereum-Knoten auf Port 8545 lauscht und die JSON-RPC-API implementiert, interagiert der Benutzer möglicherweise über diesen nicht vertrauenswürdigen Knoten mit dem Ethereum-Netzwerk.

Woher weiß web3.js, dass die lokal gehostete RPC-API ein gültiger Knoten ist?

Definieren Sie bitte einen gültigen Knoten.
Ein gültiger Knoten wäre ein Knoten, der auf Software läuft, die von der Ethereum Foundation (wie z. B. Geth) vertrieben wird, oder die allgemein als Implementierung von Ethereum (wie Ethcore Parity) akzeptiert wird.
Meinen Sie, dass ein bösartiger Virus diesen lokalen Host-Port anstelle eines echten Knotens abhören könnte, aber als echter Ethereum-Knoten fungiert, während er Schlüssel stiehlt, wenn Sie Dapps verwenden? Dies wäre sehr schwer zu erkennen und könnte möglicherweise sehr schädlich für Menschen sein, die technisch nicht wirklich verstehen, wie es funktioniert.
Ja, es gibt viele Szenarien, die mir in den Sinn kommen. Einige sind weitaus harmloser, wie z. B. ein Benutzer, der unbeabsichtigt eine Edge-Version von geth ausführt. Möglicherweise gibt es Lösungen außerhalb meiner Expertise, zumindest kann der Benutzer über web3.js benachrichtigt werden, was läuft. Es ist möglich, dass web3.js im Browser den lokal ausgeführten Knoten bereits validiert (ich habe den js-Code noch nicht untersucht, aber nachgesehen und keine Dokumentation zu dieser Art der Validierung gefunden).
Ich kann keine Möglichkeit sehen, dies zu überprüfen, außer wenn die Binärdatei signiert ist. Aber es würde bedeuten, dass Sie keine eigene Binärdatei erstellen können. Außerdem ist web3 nur eine JS-Bibliothek. Das erste, was ich tun würde, wenn ich ein Virus wäre, wäre, den Web3-Check zu deaktivieren oder ihn glauben zu lassen, dass Geth legitim ist. Ich denke, wir müssen uns in diesem Fall auf Antivirensoftware verlassen.
Dies beschreibt, wie die Geth-Interaktion unterwandert werden kann. Nicht direkt verwandt mit dieser Frage nach dem "was läuft", aber dennoch interessant. forum.daohub.org/t/urgent-buying-dao-using-mist-has-hacked/1742 . Das Bündeln des Knotens mit der Brieftasche, sodass der exponierte Port 8545 nicht erforderlich wäre, würde einen Teil der Angriffsfläche/Angriffsfläche verringern. Dies würde jedoch die kreative Verwendung dieses Ports durch Web-Apps verringern.
Vielleicht ist eine Lösung ein In-Browser-Knoten als Erweiterung, wobei die Benutzer sehr genau wissen, dass dies für kleine Transaktionen und den täglichen Gebrauch gedacht ist. Insgesamt müssen Benutzer wissen, dass Wallets und Transaktionen mit erheblichen Ressourcen auf hochsicheren Systemen stattfinden sollten.

Antworten (2)

Um die Frage zu beantworten, weiß web3 es nicht. Wenn der Port einen Dienst hostet, der eine passende Schnittstelle bietet, wird web3 diese verwenden, unabhängig davon, ob es sich um das offizielle Geth handelt oder nicht.

Sie können es versuchen web3.net.listening. Diese Eigenschaft ist schreibgeschützt und gibt an, ob der Knoten aktiv auf Netzwerkverbindungen wartet oder nicht.

Sie können überprüfen, ob ein Client geöffnet ist und web3 mit ihm kommunizieren kann.

var listening = web3.net.listening;
console.log(listening); // true of false
Ja, aber es macht keinen Unterschied, ob der Dienst nicht der echte Geth ist, sondern ein Klon oder etwas mit der gleichen Schnittstelle. Es wird web3 den Unterschied nicht sehen. Der Punkt, so wie ich es verstanden habe, ist nicht zu wissen, ob etwas, das wie Geth aussieht, auf den Port antwortet, sondern zu wissen, ob es wirklich Geth ist.
@NicolasMassart, ja das weiß ich