Questo filtro XSS è abbastanza sicuro? E se no, potresti dimostrare come potrebbe essere rotto?

-5
function htmlEntities(n) {
            return String(n).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;")
}
  • Sostituisce & con &amp; ;
  • Sostituisce < con &lt;
  • Sostituisce > con &gt;
  • Sostituisce " con &quot;

Se questo deve essere più sicuro, ti preghiamo di spiegare come interromperlo in modo da poter imparare come può essere risolto e come evitarlo.

    
posta Storm 03.09.2016 - 23:36
fonte

1 risposta

4

La prevenzione dell'XSS riguarda esclusivamente il contesto. Sono necessarie strategie diverse a seconda del contesto in cui verranno inseriti i dati non attendibili di cui si sta eseguendo l'escape.

Anche se penso che il tuo metodo andrebbe bene negli elementi HTML e negli attributi HTML tra virgolette doppie, avresti problemi nei seguenti contesti:

  • In attributi HTML con virgolette singole o senza virgolette, sarai pwned.
  • Ad es. un attributo href , verrai pwnato con es. a javascript: o vbscript: URL.
  • Nei valori letterali stringa JavaScript utilizzando virgolette singole, verrai pultato.
  • Nei valori letterali delle stringhe JavaScript utilizzando doppie virgolette, un utente malintenzionato potrebbe interrompere l'esecuzione dello script inserendo una nuova riga e quindi causare un errore di sintassi. Ciò potrebbe avere conseguenze inaspettate e sfavorevoli in alcune circostanze.
  • E poi c'è il CSS, che ha il proprio set di regole diverse ...

Per una guida dettagliata su come farlo correttamente, raccomando vivamente il cheat di prevenzione di OWASP XSS . Penso che le principali lezioni da tenere a casa su tutto ciò siano: XSS è complicato. Non affidarti alla tua soluzione prodotta a casa per fermarla. Utilizza invece una libreria ben testata.

(E Alexander O'Mara ha assolutamente ragione nel suo commento.Se questo è nel browser , vai con textContent .)

    
risposta data 04.09.2016 - 17:25
fonte

Leggi altre domande sui tag