Limitando l'ultimo XSS basato su dom quando si imposta document.title

5

Dato qualche JavaScript che modifica il titolo della pagina acquisendo dati variabili

document.title = someVariable

Sto cercando di affrontare XSS basato su dom mantenendo il titolo abbastanza leggibile. Pertanto, fare qualcosa come escape() o encodeURI() non funzionerà.

Non ho necessariamente il controllo su come il document.title può essere usato in altri script, quindi voglio assicurarmi di fare un po 'di sanitizzazione nella materia meno distruttiva, ma evitare possibili scenari in cui il modo in cui la variabile viene elaborata successivamente potrebbe essere decodificato in modo che quest'ultimo diventi XSS.

I miei primi pensieri erano qualcosa del genere:

someVariable = someVariable.replace('<script', 'noscript');
someVariable = someVariable.replace(/[<>'"]/g, '').replace(/%3[CEce]/, '');
document.title = someVariable;

Che è minimamente distruttivo dal punto di vista della leggibilità, la rimozione di questi caratteri potrebbe potenzialmente interrompere il codice successivo, ma preferirei rompere il codice a favore della sicurezza.

Mi sento come se stessi viaggiando qui, quindi vorrei sapere se esiste un approccio migliore che soddisfi i requisiti di leggibilità. In caso contrario, sono consigliati altri filtri o disinfettanti?

    
posta Eric G 20.02.2015 - 05:39
fonte

2 risposte

1

Se hai bisogno di adottare questo approccio, allora perché non rimuovere tutto tranne gli alfanumerici e il carattere dello spazio? andare per una lista bianca piuttosto che una lista nera. Non sai come in futuro gli standard in HTML e JavaScript potrebbero cambiare in modo tale che solo i personaggi possano essere buoni invece di non riconoscere i cattivi noti.

I do not necessarily have control over how the document.title may be used in other scripts, so I want to ensure that I do some sanitisation in the least destruction matter, but avoid possible scenarios where the way the variable is later processed could possibly be decoded in such a way it latter becomes XSS.

La mia domanda per te è chi ha il controllo? Ovviamente il modo corretto di gestirlo è quello di emettere correttamente la codifica quando si stampa sulla pagina - Mi chiedo semplicemente perché questa non è una soluzione accettabile per il tuo sistema. Se non riesci a controllare altri script, come fai a sapere che sono sicuri in altri modi?

Sostituire <script> non interrompe l'incorporamento degli script. Ci sono molti altri modi per iniettare script. per es.

<img src="x" onerror="alert('xss')" />
    
risposta data 21.02.2015 - 18:10
fonte
0

La soluzione migliore sarebbe quella di mettere in blacklist determinati personaggi e sequenze (in modo ricorsivo). Tutto dipende da quanta usabilità sei disposto a sacrificare per la sicurezza. È possibile inserire nella lista nera i tag degli script e qualcuno può usare img src = # onerror ecc. Non può fare male farlo se non ci si aspettano queste sequenze, ma ancora una volta non conosco l'uso della propria applicazione.

Credo che quello che stai facendo non è buono ma è il miglior approccio possibile qui.

    
risposta data 29.06.2015 - 05:16
fonte

Leggi altre domande sui tag