Um das "Warum?" Der Grund, warum Browser im Gegensatz zu AJAX-Aufrufen nicht die gleiche Ursprungsrichtlinie (von der CORS eine Lockerung darstellt) für WebSockets erzwingen, liegt darin, dass WebSockets eingeführt wurden, nachdem der Wert von Ursprungsübergreifenden Anforderungen festgelegt wurde, und weil sie Da die SOP zunächst nicht der SOP unterliegt, gilt der historische Grund für die clientseitigen CORS-Überprüfungen nicht.
Für AJAX haben Server in den Tagen einer umfassenden Single Origin-Richtlinie nie erwartet, dass ein authentifizierter Browser eine Anfrage von einer anderen Domäne 1 sendet , und mussten daher nicht sicherstellen, dass die Anfrage von einem vertrauenswürdigen Speicherort 2 stammt . Überprüfen Sie einfach die Sitzungscookie. Spätere Lockerungen wie CORS mussten clientseitig überprüft werden, um zu vermeiden, dass vorhandene Anwendungen durch Verletzung dieser Annahme einem Missbrauch ausgesetzt werden (was effektiv zu einem CSRF-Angriff führt ).
Wenn das Web heute erfunden würde und wüsste, was wir jetzt wissen, wären für AJAX weder SOP noch CORS erforderlich, und es ist möglich, dass die gesamte Validierung dem Server überlassen bleibt.
WebSockets ist eine neuere Technologie und unterstützt domänenübergreifende Szenarien von Anfang an. Jeder, der eine Serverlogik schreibt, sollte sich der Möglichkeit von Ursprungsübergreifenden Anforderungen bewusst sein und die erforderliche Validierung durchführen, ohne dass umfangreiche Browser-Vorsichtsmaßnahmen à la CORS erforderlich sind.
1 Dies ist eine Vereinfachung. Ursprungsübergreifende GET-Anforderungen für Ressourcen (einschließlich <img> -, <link> - und <script> -Tags) und POST-Anforderungen für die Formularübermittlung waren als grundlegendes Merkmal des Webs immer zulässig. Heutzutage sind auch Cross-Origin-AJAX-Aufrufe mit denselben Eigenschaften zulässig und werden als einfache Cross-Origin-Anforderungen bezeichnet . Der Zugriff auf die zurückgegebenen Daten aus solchen Anforderungen im Code ist jedoch nur zulässig, wenn dies in den CORS-Headern des Servers ausdrücklich gestattet ist. Es sind auch diese "einfachen" POST-Anfragen, die den Hauptgrund dafür darstellen, dass Anti-CSRF-Token erforderlich sind, damit sich Server vor bösartigen Websites schützen können.
2 Tatsächlich war nicht einmal eine sichere Möglichkeit zum Überprüfen der Anforderungsquelle verfügbar, da der Referer
Header gefälscht werden kann, z. B. mithilfe einer Sicherheitsanfälligkeit bezüglich offener Umleitung. Dies zeigt auch, wie schlecht CSRF-Schwachstellen damals verstanden wurden.