Perché i websocket non supportano intestazioni personalizzate?

0

Questa domanda è correlata a questo domanda ho chiesto

Per riassumere, sto giocando con websocket al momento e sto cercando di capire come autenticare un client che si connette al server usando una connessione websocket.

In una connessione normale, io uso l'autenticazione basata su token, in pratica ho appena ottenuto un token dal server dopo l'accesso. Ogni volta che faccio una richiesta al server, la metto in un'intestazione personalizzata chiamata Autenticazione che il mio server lo legge da lì.

Con websockets, questo non funziona perché i websocket non hanno intestazioni personalizzate. Sono rimasto con due opzioni per passare questo token.

1) mettendo il token nella stringa di query - ovviamente non è una grande opzione. Il token può essere registrato dal server ecc.

2) mettendo il token in un cookie - questo funziona ma solo quando il client e il server siedono nello stesso dominio. Ci sono anche altre restrizioni come il client deve essere un browser e supportare i cookie ecc.

Ad ogni modo, l'altra domanda sta cercando di trovare una soluzione, questa domanda riguarda la comprensione del perché questo è un problema. Perché i websocket non supportano intestazioni personalizzate? È improbabile che si tratti di una svista: le web socket e l'autenticazione basata su token sono entrambe tecnologie abbastanza mature. C'è qualche tipo di problema di sicurezza con l'abilitazione di intestazioni personalizzate durante la connessione web socket?

    
posta stickman 26.11.2017 - 13:04
fonte

1 risposta

6

Why doesn't websockets support custom headers? It's unlikely to be an oversight ...

Sono d'accordo che sembra una svista.

Questo in realtà non mi sorprende dal momento che, a mio avviso, l'implementazione di WebSockets all'interno del browser non era ben pensata in primo luogo. Il problema più evidente è che WebSockets ignora la stessa politica di origine o le CORS restrizioni, ovvero la il server deve essere esplicitamente controllato sull'origine della connessione ( Origin header) perché altrimenti Cross-Site WebSocket Hijacking sarebbe possibile

Questo design non sicuro per impostazione predefinita è in contrasto con il comportamento sicuro di default di CORS, creato un po 'prima di WebSockets. Dato questo ovvio problema di sicurezza, dubito che alcune considerazioni sulla sicurezza abbiano avuto un ruolo nel non consentire intestazioni personalizzate come in XHR.

Si noti che il protocollo WebSockets stesso supporta intestazioni personalizzate poiché inizia con un handshake HTTP simile a una normale richiesta HTTP. È solo l'API del browser a cui manca la possibilità di utilizzare intestazioni personalizzate.

    
risposta data 26.11.2017 - 14:24
fonte

Leggi altre domande sui tag