Ho sentito dire che la soluzione più semplice per prevenire attacchi di SQL injection è codificare in html tutto il testo prima di inserirlo nel database. Quindi, ovviamente, decodifica tutto il testo durante l'estrazione. L'idea è che se il testo contiene solo e commerciale, punto e virgola e caratteri alfanumerici, non puoi fare nulla di malevolo.Htmlencoding è una soluzione adeguata per evitare attacchi di SQL injection?
Mentre vedo una serie di casi in cui questo può sembrare a lavorare, prevedo i seguenti problemi nell'utilizzo di questo approccio:
- Sostiene di essere una pallottola d'argento. Potenzialmente impedire agli utenti di questa tecnica di comprendere tutti i possibili problemi correlati, come gli attacchi di secondo ordine.
- Non impedisce necessariamente attacchi di carico utile di secondo ordine/ritardato.
- Sta usando uno strumento per uno scopo diverso da quello per cui è stato progettato. Ciò potrebbe causare confusione tra i futuri utenti/sviluppatori/manutentori del codice. È anche probabile che sia ben lontano dall'ottimizzazione delle prestazioni.
- Aggiunge un potenziale calo di prestazioni a ogni lettura e scrittura del database.
- Rende i dati più difficili da leggere direttamente dal database.
- Aumenta la dimensione dei dati sul disco. (Ogni carattere ora è di ~ 5 caratteri - A sua volta questo può anche influire sui requisiti di spazio su disco, paging dei dati, dimensioni degli indici e prestazioni degli indici e altro ancora?)
- Ci sono potenziali problemi con i caratteri unicode ad alta gamma e la combinazione di caratteri?
- Alcune routine/librerie di codice html [en | de] si comportano in modo leggermente diverso (ad esempio alcuni codificano un apostrofo e altri no. Possono esserci più differenze.) Quindi lega i dati al codice utilizzato per leggere & scrivilo . Se si utilizza codice che [en | de] codifica diversamente, i dati potrebbero essere modificati/corrotti.
- È potenzialmente più difficile lavorare con (o almeno eseguire il debug) qualsiasi testo già codificato in modo simile.
C'è qualcosa che mi manca?
Si tratta di un approccio ragionevole al problema della prevenzione degli attacchi SQL injection?
Ci sono dei problemi fondamentali nel cercare di prevenire gli attacchi per iniezione in questo modo?
Il modo più semplice per evitare attacchi di iniezione non è farlo! Le query parametrizzate sono state create appositamente per questo problema e forniscono anche un aumento delle prestazioni per le query che differiscono solo per i valori. Per favore, no, un angelo muore ogni volta che uno sviluppatore aggiunge valori a sql! * wink * – Will
Per la cronaca non lo faccio e non penso sia una buona idea. Voglio solo assicurarmi di capire tutte le ragioni per cui questo è male! –
Vedere le grandi informazioni e le esercitazioni di Open Web App Security Project: https://www.owasp.org –