Non dovresti tentare di farlo perché non c'è modo di rilevare tutti gli script dannosi. Esistono vari modi per nasconderlo in quanto non tutti sono presentati in modo corretto all'interno di <script>
tag. Prendi questo per esempio:
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^'=alert("XSS")>
Dai un'occhiata al XS Filter Evasion Cheat Sheet per altri esempi.
Se stai visualizzando i file caricati in HTML, dovresti impostare una politica di sicurezza dei contenuti per impedire l'esecuzione di JavaScript e CSS incorporati. (Utilizzando CSS è possibile incorporare JavaScript, alcune versioni di Internet Explorer supportano questo)
Il CSP può prevenire lo script inline, ma consentire l'esecuzione dello script in file js
esterni dal tuo server o da fonti attendibili (come Google CDN).
Dovresti assicurarti di verificare che il browser supporti prima CSP (potresti implementare un test per questo in una pagina prima di visualizzare il contenuto), e potresti farlo in combinazione con un disinfettante HTML che elabora la pagina contenuto solo su output nel browser. Questo sarà un approccio di cintura e bretelle. È necessario utilizzare una soluzione ben collaudata per la sanitizzazione, ad esempio OWASP AntiSamy . Alcune vulnerabilità sono state trovate nelle versioni precedenti della maggior parte dei disinfettanti (anche questo), ma l'uso in combinazione con un CSP avrebbe impedito la maggior parte degli attacchi in quanto ciò avrebbe fornito la finestra di tempo per applicare la patch all'ultima versione.
L'altra opzione sarebbe quella di aggiungere l'intestazione Content Disposition a qualsiasi contenuto servito, in modo che venga scaricato in la macchina dell'utente anziché la visualizzazione in un browser nel contesto del tuo dominio. Qualsiasi codice in esecuzione nel contesto del tuo dominio può trarre vantaggio dalla Stessa politica di origine per attaccare gli utenti che visualizzano il contenuto. Ciò non sarebbe possibile offline (Internet Explorer invia un messaggio di avviso con prompt di conferma e browser come Chrome e Firefox considerano il file system come null
di origine per interrompere lo script che accede al contenuto online).