Un Content-Type: text / plain intestazione protegge contro XSS nei browser?

3

Sto creando un piccolo script web che reindirizza principalmente il browser ma presenta alcune condizioni di errore quando i parametri di input non possono essere convalidati.

Mi piacerebbe visualizzare messaggi di errore come il parametro XXX aveva un valore YYY non valido, ma questo aprirà lo script agli attacchi XSS se il valore del parametro non è scappato peoperly prima dell'output. È abbastanza sicuro solo impostare Content-Type della risposta su text/plain o gli attacchi XSS sono ancora possibili?

    
posta chiborg 19.08.2015 - 13:34
fonte

1 risposta

9

Non devi fare affidamento sui browser che rispettano l'intestazione content-type per sicurezza. Un rapido sguardo a CVE-2010-1420 dovrebbe darti un'idea. Il meccanismo Content-sniffing implementato nei browser può essere manipolato dagli autori di attacchi per attivare attacchi XSS ( Content sicuro Sniffing per browser Web: un sondaggio ).

Rilevamento dei comportamenti di sniffing dei contenuti

Secondoquestosondaggio,comepuoivedere,ilbrowserSafaripotrebbecausareunproblemaanchesequestononèunproblemainaltribrowser(possoaggiungerti Bug 637981 a questo elenco).

Vai oltre:

Puoi proteggere ulteriormente la tua applicazione consentendo al tuo server web di forzare il browser a disabilitare MIME Sniffing per il file servito:

  X-Content-Type-Options: nosniff

Poiché gli attacchi a cui stai cercando di difendersi potrebbero essere fatti tramite i file che puoi consentire oggi o domani ai tuoi visitatori di caricare, puoi forzare il browser a presentare all'utente una finestra di dialogo di salvataggio dei file. Quando l'intestazione noopen è impostata, l'utente non può aprire direttamente il file perché sarà costretto a salvare il file localmente per primo, il che impedisce il rendering del file nel contesto corrente del browser. Puoi ottenerlo con:

Content-Disposition: attachment; filename=untrustedfile.html

Inoltre, in questo ultimo caso (intendo se autorizzi gli utenti a caricare file), puoi aggiungere un altro livello di sicurezza alla tua applicazione web ( Scoperta rischiosa ):

  • Utilizza una whitelist per assicurarti che sia consentita solo una quantità limitata di estensioni di file
  • Archivia i file caricati al di fuori della radice Web e utilizza uno script di download sicuro che carica questi file dal disco e ne presenta i contenuti all'utente;
  • Utilizza nomi di file non prevedibili e modifica l'estensione del file.
risposta data 19.08.2015 - 13:55
fonte

Leggi altre domande sui tag