Ho una funzionalità che richiederebbe all'utente di fornire l'URL per uno script personalizzato, archiviare l'URL in un cookie e incorporare lo script nelle risposte successive.
Questo, naturalmente, solleva immediatamente preoccupazioni sulle possibilità di un attacco di cross-site scripting, ma usando HTTP, dato che nessun terzo può manipolare i cookies * a meno che non esegua un attacco man-in-the-middle, al quale puntualizzare che è più facile inserire direttamente gli script nella pagina, questo non compromette ulteriormente l'integrità del sito.
* supponendo che tutte le porte di tutti i sottodomini del dominio di origine siano attendibili, poiché i cookie non rientrano nella stessa regolazione dell'origine originale
Utilizzando HTTPS, tuttavia, ci si aspetterebbe che, utilizzando la crittografia e la certificazione appropriate, come qualsiasi altra parte della comunicazione, i cookie possano essere attendibili per provenire dall'utente, impostando indirettamente tramite il server o direttamente tramite un apposito interfaccia utente, eliminando il rischio di un man-in-the-middle.
Risulta che non è questo il caso, dal momento che i browser possono essere istruiti a non inviare cookie impostati attraverso canali sicuri su canali non sicuri (utilizzando l'attributo secure
), ma inviano prontamente i cookie ottenuti attraverso canali non sicuri su canali sicuri.
Quindi, ad esempio, un utente malintenzionato, deviando il traffico intorno a un punto di accesso wireless, potrebbe attirare una vittima nella richiesta di una pagina nel dominio specificato tramite HTTP (facendo clic su un collegamento, visualizzando una risorsa incorporata come un'immagine o reindirizzandola a esso), rispondere con un cookie contraffatto e fare in modo che la vittima utilizzi il cookie contraffatto mentre comunica con il server utilizzando HTTPS (iniettando uno script dannoso, fissando la sua sessione ecc.).
Considerando tutto ciò, ho diverse domande:
-
La comprensione di cui sopra è corretta, e se un server che comunica con il client tramite HTTPS considera tutti i cookie potenzialmente compromessi, li utilizza solo in un modo che impedisce di compromettere la sicurezza del sito (consentendo solo una selezione di script predefiniti fidati, rigenerazione dell'ID di sessione, ecc.)?
-
Esiste un modo per fornire il framework disponibile di HTTP per garantire l'integrità dei cookie quando si utilizza una connessione sicura a cui non avevo pensato? (Forse usando la crittografia?)
-
C'è qualche sforzo di standardizzazione in corso per risolvere questo problema, di cui non ho sentito parlare? In caso contrario, come mai i fornitori di browser, che si spingono fuori strada per applicare la stessa politica di origine ovunque e per avvisare gli utenti dei rischi di contenuti misti, non affrontano questa debolezza nel protocollo?