Ho sempre convalidato il mio input utente in base a un elenco di caratteri validi / consentiti, piuttosto che a un elenco di caratteri non validi / non consentiti (o semplicemente nessuna convalida). È solo un'abitudine che ho preso, probabilmente su questo sito e non l'ho mai messo in discussione fino ad ora.
Ha senso se si desidera, ad esempio, convalidare un numero di telefono o convalidare un prefisso, tuttavia recentemente mi sono reso conto che sto anche convalidando input come campi di testo biologico, commenti degli utenti, ecc. per i quali l'input non ha una sintassi solida.
Il vantaggio principale è sempre sembrato essere: La convalida dei caratteri consentiti riduce il rischio di perdere un personaggio potenzialmente dannoso, ma aumenta il rischio che tu non permetta un personaggio che l'utente potrebbe voler utilizzare. Il primo è più importante.
Tuttavia, se sto impedendo correttamente l'iniezione di SQL (con istruzioni preparate) e anche l'output di escape, c'è bisogno di questa ulteriore barriera di protezione? Mi sembra che stia semplicemente autorizzando praticamente tutti i caratteri sulla tastiera e mi sto dimenticando di consentire alcuni caratteri comuni.
Esiste una pratica accettata per questa situazione? O mi manca qualcosa di ovvio?
Grazie.