Warum gibt es keine Same-Origin-Richtlinie für WebSockets? Warum kann ich mich mit ws://localhost verbinden?

Lesezeit: 6 Minuten

Benutzer-Avatar
binwiederhier

Ich möchte WebSockets für die Kommunikation zwischen Prozessen für meine Anwendung verwenden (Daemon<->WebGUI und Daemon<->FatClient usw.). Während des Tests habe ich versucht, über den JavaScript-WebSocket-Client auf websocket.org (http://www.websocket.org/echo.html).

Meine Frage ist jetzt:
Warum ist das möglich? Ist in den Browsern (hier: FF29 unter Linux) keine Cross-Origin-Policy implementiert?

Ich frage, weil wenn websocket.org böse wäre, es versuchen könnte, mit meinem lokalen WS-Server zu kommunizieren und jede Nachricht, die es von localhost erhält, an einen anderen Server umzuleiten:

Local WebSocket Server            Browser            Evil Web Server
at ws://localhost:1234                               at http://evil.tld
        |                            |                       |
        |                            |------[GET /]--------->|
        |                            |<-----[HTML+EvilJS]----|
        |<------[connect ws://..]----|                       |
        |<----[some communication]-->|                       |
        |                            |----[evil forward]---->|
        |                            |                       |

Ich habe nicht den gesamten Anwendungsfall getestet, aber die Verbindung zu ws://localhost aus dem von websocket.org gelieferten JS funktioniert definitiv.

  • websocket.org sollte nicht böse sein, Websockets können es sein 😉

    – kuldeep.kamboj

    15. Mai 2014 um 9:29 Uhr

Benutzer-Avatar
Mitarbeiter

Um das “Warum?” Der Grund, warum Browser die Same Origin Policy (von der CORS eine Lockerung ist) für WebSockets im Gegensatz zu AJAX-Aufrufen nicht durchsetzen, liegt darin, dass WebSockets eingeführt wurden, nachdem der Wert von Cross-Origin-Anfragen festgestellt wurde, und weil sie ‘ Da der SOP von vornherein nicht unterliegt, entfällt der historische Grund für die clientseitigen CORS-Prüfungen.

Für AJAX erwarteten Server in den Tagen einer pauschalen Single-Origin-Richtlinie nie, dass ein authentifizierter Browser eine Anfrage von einer anderen Domäne sendet1und musste daher nicht sicherstellen, dass die Anfrage von einem vertrauenswürdigen Ort kam2, überprüfen Sie einfach das Sitzungscookie. Spätere Lockerungen wie CORS mussten clientseitige Überprüfungen vermeiden bestehende Anwendungen dem Missbrauch aussetzen indem man gegen diese Annahme verstößt (effektiv a tut CSRF-Angriff).

Wenn das Web heute erfunden würde, wären nach unserem jetzigen Wissen weder SOP noch CORS für AJAX erforderlich, und es ist möglich, dass die gesamte Validierung dem Server überlassen würde.

WebSockets sind eine neuere Technologie und wurden entwickelt, um domänenübergreifende Szenarien von Anfang an zu unterstützen. Jeder, der Serverlogik schreibt, sollte sich der Möglichkeit von Cross-Origin-Anfragen bewusst sein und die notwendige Validierung durchführen, ohne dass schwerfällige browserseitige Vorsichtsmaßnahmen à la CORS erforderlich sind.


1 Dies ist eine Vereinfachung. Ursprungsübergreifende GET-Anforderungen für Ressourcen (einschließlich -, – und

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy