Sanitizzazione di JavaScript per impedire XSS

2

Sto passando un esercizio di correzione delle vulnerabilità per un cliente e sto cercando di capire come mitigare meglio questo particolare buco. Sul nostro sito c'è uno script che richiama il contenuto in una nuova finestra usando <%= %> . Essenzialmente questo prende un link hard-coded in un file include che assomiglia a qualcosa di

<a href="/path/to/script?x=/path/to/linked/thing.img" target="">link</a>

e lo visualizza sulla pagina risultante in html usando uno script che assomiglia a qualcosa del tipo:

<img src="<% =request.querystring("x") %>">

Questo script è in centinaia di include, quindi sto cercando di capire il modo più efficace per mitigarlo. Devo usare find e replace per rimuovere lo script dai file di inclusione o esiste un modo per disinfettare lo script effettivo usando qualcosa di diverso da <%= %> ?

Il tutto è legacy, super goffo e deve essere sostituito in ogni caso, ma come ho detto, stiamo parlando di centinaia di file qui, e non tutti seguono la stessa sintassi, quindi non posso eseguire una ricerca batch e sostituire per tutti loro. Dovrà essere in piccoli gruppi e dovrò ancora entrare in ognuno di essi per verificare se qualcosa si è rotto. Uccidimi ora.

Sono un progettista / sviluppatore front-end, non un esperto di sicurezza (e neanche un mago di JavaScript), quindi qualsiasi aiuto qui sarebbe molto apprezzato.

    
posta kristina childs 28.03.2013 - 19:28
fonte

1 risposta

1

Un modo semplice sarebbe quello di creare una white-list di caratteri, come le barre alfanumeriche e in avanti - e assicurandosi che il file esista sul tuo filesystem locale. Vuoi evitare di avere: <img src="javascript:..."> e così.

Per questo, ti consiglio di fare in modo che una funzione dica sanitize() che filtra i caratteri indesiderati e avvolgere ognuno di questi con essi

<img src="<% =sanitize(request.querystring("x")) >">

A seconda del tuo framework usato (ASP, Ruby, ...) potresti forse patch scimmia il codice, in modo che request.querystring() restituisca sempre una versione sterilizzata.

    
risposta data 28.03.2013 - 20:01
fonte

Leggi altre domande sui tag