La soluzione più efficace è probabilmente un mix di convalida dell'input e codifica dell'output.
Non so che puoi dipendere dal cliente per implementare efficaci attenuazioni XSS. Speriamo che lo facciano, ma non è qualcosa su cui puoi fare affidamento.
La prima domanda che vuoi porre è che cosa fai con l'input che fallisce la validazione. Rimozione di caratteri errati e il resto degli input continua? Ciò renderà la tua applicazione imprevedibile per l'utente, che non sembra mai una buona idea.
Un'altra cosa da tenere a mente è che i tuoi dati potrebbero non essere sempre visualizzati in HTML. Cosa fare se i dati sono inclusi in un documento PDF o inviati a una stampante? Questi sistemi avranno i loro formati e la codifica HTML non avrà senso.
Ecco l'approccio che raccomanderei:
- Definisci l'input accettabile in termini di dimensioni e set di caratteri.
- Definisci il tuo comportamento per l'input non valido.
- Convalida l'input e rifiuta (consigliato) o scrub
- Utilizza metodi sicuri per memorizzare l'input nel tuo archivio dati
- Quando si presentano i dati agli utenti, codificarli correttamente per il formato (HTML, javascript, ecc.)
In questo caso c'è il rischio che qualcuno nel tuo team faccia il presupposto perché i dati si trovano in un datastore interno che è sicuro e iniziano a utilizzare i dati senza eseguire la codifica appropriata.