Se i dati sono "sicuri" o meno dipende da come vengono utilizzati i dati. Pertanto, non può esistere alcun quadro che risulti magicamente disinfettato dai dati. Invece:
- determina come verranno utilizzati i dati.
- per ogni utilizzo, determina se i dati devono essere elaborati per sicurezza
- implementare tali misure di sicurezza
Esempio, dove i dati sono messaggi di testo in chiaro:
-
Utilizzo: il messaggio viene visualizzato come parte di una pagina HTML.
Requisito di sicurezza: i caratteri speciali HTML devono essere sottoposti a escape per evitare XSS.
Soluzione: utilizza la funzione di escape esistente del tuo motore di template.
-
Utilizzo: il messaggio è archiviato in un database SQL.
Requisito di sicurezza: il contenuto del messaggio non deve essere interpolato verbatim in un'istruzione SQL.
Soluzione: eseguire un'istruzione preparata con il contenuto del messaggio come parametro.
-
Utilizzo: il messaggio viene visualizzato in un sistema di chat pubblico.
Requisito: il messaggio non deve contenere un linguaggio offensivo.
Soluzione: rifiuta i messaggi quando includono parole di parolacce ovvie.
In questo esempio, gli stessi dati vengono utilizzati in diversi contesti che non possono essere corretti in qualche modo disinfettando l'input per primi: hanno requisiti completamente diversi.
Ogni volta che viene tentata una tale sanificazione, di solito è inefficace (ad esempio aggiungendo barre rovesciate prima di alcuni caratteri), o addirittura distruttiva (ad esempio eliminando caratteri "pericolosi"). Una volta ho usato un sistema di messaggistica che eliminava caratteri speciali come dieresi o la maggior parte dei segni di punteggiatura, rendendo i messaggi incomprensibili.
Tuttavia, quando si implementano misure di sicurezza adeguate (che possono includere passaggi come la rimozione di contenuto o la visualizzazione di contenuto), utilizzare le implementazioni esistenti è una buona idea. Probabilmente il framework è testato meglio del codice che avresti scritto. Ti farà risparmiare tempo. Ad esempio, "linguaggio offensivo" è davvero difficile da determinare. Potrebbe essere preferibile utilizzare alcune librerie esistenti con varie euristiche, o almeno iniziare con un elenco di parolacce pubblicamente disponibili.
In ogni caso, la chiave è non gettare una soluzione esistente al tuo problema per vedere se "funziona", ma per iniziare con il tuo problema reale e quindi elaborare una soluzione - dove quella soluzione potrebbe già essere parte della tua struttura .