Per affrontare il "Perché?" parte, il motivo per cui i browser non applicano la politica della stessa origine (di cui CORS è un allentamento) per WebSocket rispetto alle chiamate AJAX, è perché i WebSocket sono stati introdotti dopo che è stato stabilito il valore delle richieste cross-origin e perché " non sono soggetti a SOP per cominciare, il motivo storico per i controlli lato client CORS non si applica.
Per AJAX, ai tempi di una politica di origine singola globale, i server non si aspettavano mai che un browser autenticato inviasse una richiesta da un dominio diverso 1 , quindi non era necessario assicurarsi che la richiesta provenisse da una posizione attendibile 2 , basta controllare il cookie di sessione. Successivi allentamenti come CORS dovettero avere controlli lato client per evitare di esporre le applicazioni esistenti ad abusi violando questo presupposto (eseguendo effettivamente un attacco CSRF ).
Se il Web venisse inventato oggi, sapendo quello che sappiamo ora, per AJAX non sarebbero necessari né SOP né CORS ed è possibile che tutta la convalida sarebbe lasciata al server.
I WebSocket, essendo una tecnologia più recente, sono progettati per supportare scenari interdominio sin dall'inizio. Chiunque scriva la logica del server dovrebbe essere consapevole della possibilità di richieste cross-origin ed eseguire la convalida necessaria, senza la necessità di pesanti precauzioni lato browser alla CORS.
1 Questa è una semplificazione. Le richieste GET cross-origin per le risorse (inclusi i tag <img>, <link> e <script>) e le richieste POST per l'invio di moduli erano sempre consentite come caratteristica fondamentale del Web. Al giorno d'oggi, le chiamate AJAX cross-origin le cui richieste hanno le stesse proprietà sono anche consentite e note come richieste cross-origin semplici . Tuttavia, l'accesso ai dati restituiti da tali richieste nel codice non è consentito a meno che non sia esplicitamente consentito dalle intestazioni CORS del server. Inoltre, sono queste "semplici" richieste POST la ragione principale per cui i token anti-CSRF sono necessari affinché i server si proteggano da siti Web dannosi.
2 In effetti, un modo sicuro per controllare l'origine della richiesta non era nemmeno disponibile poiché l' Referer
intestazione può essere falsificata, ad esempio utilizzando una vulnerabilità di reindirizzamento aperta. Ciò mostra anche come allora le vulnerabilità CSRF fossero comprese male.