"per quanto ne so ..." è la radice di molti bug, non riuscendo a codificare personaggi pericolosi. È l'approccio della "lista nera" per codificare solo le cose che sai essere pericolose invece di non codificare solo le cose che sai non sono pericolose.
Per un esempio, immagina che il server imposta il valore di un attributo di tag HTML sull'input dell'utente ...
<input value=userdata>
Quanto sopra è un HTML completamente legale e valido. Molte pagine web non incapsulano i loro valori tra virgolette e i browser lo interpretano correttamente.
Ora, supponi di utilizzare l'elenco OWASP che hai incluso nella parte superiore della pagina. Nota che lo spazio non è nella lista ....
<input value=foo onclick=alert()>
Ora abbiamo un attacco di successo. Abbiamo usato lo spazio per uscire dal contesto precedente, quindi il segno di uguale per impostare un contesto in cui possiamo scrivere javascript e le parentesi per eseguire una funzione. Nessuno di questi era nella blacklist (rotta) che hai mostrato.
Con questo stesso attacco (usando lo spazio per scoppiare) il simbolo / può essere usato come parte del contenuto di javascript come segno di divisione, parte di un commento (// o / *) o in altri modi. Il foglio cheat di evasioni del filtro OWASP ( link ) ha un buon elenco di stringhe di attacco che utilizzano caratteri variabili, a seconda di cosa è o non è codificato, e per contesti diversi. Il trattino (-) può essere usato per il markup XUL contro mozilla.
Solo perché non puoi vedere dove sarebbe un problema non è mai abbastanza buono. DEVI sapere che non può mai essere un problema prima di lasciarlo passare. Come puoi vedere con l'esempio precedente, anche OWASP non è riuscito a prevedere un utilizzo valido dei dati utente e le loro istruzioni di codifica erano incomplete.
La cosa sicura è codificare sempre tutto tranne ciò che non può essere dannoso. Generalmente, è sicuro codificare tutti i caratteri ASCII non alfanumerici sotto il punto di carattere 127 e lasciare che tutto il resto vada in chiaro. Meno di questo invita errori di quello sopra descritto.