Limitare il set di caratteri in questo modo (anche chiamato whitelisting) è uno dei metodi raccomandati di validazione dell'input . Lo scopo della convalida dell'input è impedire che un programma esegua dati che potrebbero causare problemi non previsti.
Ci sono molti attacchi riusciti che sono il risultato di URL malformati (questi non sono veri URL di attacco, ma rappresentativi di attacchi):
- injection pathpath:
http://example.com/?C:\documents\top_secrets.txt
- overflow del buffer:
http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaa...aaaEvilShellCode
- script injection:
http://example.com/?<script>alert("Click me!")</script>
- Iniezione SQL:
http://example.com/?USER=' or 1=1; select * from users
Le prime reazioni a questi attacchi consistevano nel proibire il carattere barra rovesciata, le virgolette, gli asterischi e i simboli minore o maggiore di. Questo è chiamato blacklisting; sfortunatamente, la lista nera è per lo più un approccio "patch dopo aver imparato circa l'attacco". La whitelisting è un po 'più efficace della blacklist. Tuttavia, la limitazione dei caratteri visualizzati in un URL può fare praticamente nulla per prevenire molti di questi attacchi se possono essere bypassati utilizzando percentuale codifica , che consente all'utente malintenzionato di utilizzare solo caratteri dalla lista bianca approvata:% 2F è uguale a /, ecc.
Per essere efficace, la regexp in CodeIgniter deve essere eseguita dopo la decodifica della codifica percentuale. E per evitare problemi di overflow del buffer mentre si testano semplicemente i dati con regexp, il primo passo del validatore deve essere il controllo della lunghezza.
C'è un altro problema che potrebbero tentare di impedire con la loro lista bianca, e cioè dirottamento di URL utilizzando Caratteri Unicode per simulare i caratteri ASCII . Per un essere umano che fa semplicemente clic su un collegamento, le stringhe "exampleZurichBank.com" e "exampleZuricⱨBank.com appaiono simili.Il blocco dei caratteri Unicode che non si trovano nell'intervallo [AZ] [az] aiuta a prevenirli, ma disenflama anche un grande segmento del pianeta bloccando gli URL nei loro alfabeti nativi.
Tieni presente che la convalida dell'input è solo una misura preventiva di molti che devono ancora essere implementati. Le applicazioni devono ancora difendersi da altre vulnerabilità comuni, come XSS, CSRF, SQL injection, session hijacking, ecc.