it-swarm.com.de

Warum keine Unterstützung für TCP Sockets in JavaScript?

Ich weiß, dass es jetzt WebSockets gibt, aber was ist das Problem bei der Bereitstellung einer Socket-API, um die Interaktion mit vorhandenen Protokollen zu ermöglichen?

Ich meine, schließlich kann ich ein verstecktes Flash-Objekt verwenden, um dasselbe bereits zu tun. Gibt es einen Angriffsvektor, den ich vermisse?

8
Simon Farshid

... aber was ist das Problem bei der Bereitstellung einer Socket-API, um die Interaktion mit vorhandenen Protokollen zu ermöglichen?

Dies ist keine Einschränkung der Sprache selbst, sondern ihrer Verwendung innerhalb der Sandbox im Browser. Stellen Sie sich vor, ein Skript irgendwo im Internet wird in den Browser geladen und kann von innerhalb des Browsers auf jeden Computer zugreifen, der mit beliebigen Protokollen vom Browser erreicht werden kann. Sie können dies leicht missbrauchen, um Spam über einen unternehmensinternen Mailserver zu senden oder andere interne und externe Ressourcen anzugreifen/zu missbrauchen.

Dies bedeutet, dass einige Einschränkungen vorhanden sein müssen und die verschiedenen Sandbox-Umgebungen für die verschiedenen Sprachlaufzeiten unterschiedliche Einschränkungen bieten:

  • Bei Flash muss der Zielhost den Zugriff explizit zulassen, indem er eine entsprechende Socket-Richtliniendatei bereitstellt. Dies ähnelt dem Mechanismus in HTML5 CORS .
  • Nicht vertrauenswürdig Java Applets sind auf die Kommunikation mit dem Host beschränkt, der das Applet bereitstellt.
  • Mit JavaScript im Browser können Sie mit fast allen Websites kommunizieren, sind jedoch durch das Protokoll eingeschränkt, das Sie verwenden können, d. H. HTTP (durch CORS eingeschränkt) und WebSockets.
17
Steffen Ullrich

Ich bin nicht sicher, welchen Socket-API-Zugriff ein Flash-Objekt bietet, aber es gibt sehr gute Gründe, einfache TCP oder UDP-Sockets (geschweige denn jede andere Art von) Sockets) in JavaScript nicht zuzulassen.

Das größte Problem ist wahrscheinlich, dass Sie im Grunde eine Möglichkeit bieten, Firewalls zu umgehen, wenn Sie dies tun. Jeder Dienst auf Ihrem Computer, der Loopback-Netzwerksockets abhört, die normalerweise von externen Angreifern nicht erreicht werden können, kann jetzt über den Browser angegriffen werden. Auf jeden Computer in Ihrem Netzwerk, der normalerweise durch Ihr Gateway und Ihre Firewall vom Internet isoliert ist, kann jetzt über Internetcode zugegriffen oder angegriffen werden.

Es gibt auch andere Gründe. Port-Scanning und DDOS-Angriffe werden viel einfacher, wenn Browser sie ohne Plugin ausführen können (Ja, Browser können versuchen, DDOS auf HTTP (S) -Servern zu starten, aber sie könnten auf niedrigerer Ebene viel effizienter sein Steckdosen). Netzwerkwürmer (insbesondere solche, für die nur ein kleiner Teil der Computer anfällig ist) können sich viel schneller verbreiten, wenn jeder, der eine Anzeige auf einer beliebten Website anzeigt, Angriffe aussendet, anstatt nur diejenigen, die tatsächlich infiziert werden.

Websockets bieten eine Möglichkeit zur Socket-Kommunikation mit Dingen, die explizit mit einem Browser kommunizieren möchten, auf dem nicht vertrauenswürdiger Code ausgeführt wird. Der typische Internet-Server ist ähnlich gehärtet und erwartet böswillige Clients aller Art. Das Problem kommt von Diensten, die nicht böswilligen Datenverkehr erwarten, da sie nur von vertrauenswürdigen Clients erreicht werden können. JS-gesteuerte Sockets würden das völlig kaputt machen.

3
CBHacking

Die Browser, die einem typischen TCP Socket) entsprechen, sind die WebSockets API spec .

Wenn Sie Sockets in JavaScript möchten, sehen Sie sich die Socket API in node.js an

0
jas-