Istruttore: Come hai
visto finora, le iniezioni di SQL sono molto pericolose.
Inoltre, sono molto facili (borbottii) e molto facili da trovare.
Li troverai ovunque in alcuni siti Web davvero famosi.
Le persone cercano di prevenire queste vulnerabilità utilizzando i filtri.
I filtri possono far sembrare che non ci siano exploit,
ma se in realtà ci provi di più usando codifiche, diversi
tipi di codifica o usando un proxy, sarai in grado
di bypassare la maggior parte di questi filtri.
Alcuni programmatori usano una lista nera.
Ad esempio, impediscono l'uso dell'unione, impediscono l'uso
dell'inserto e cose del genere.
Ancora una volta, non è sicuro al 100%.
Può essere bypassato.
Usi una lista bianca?
Esattamente gli stessi problemi della lista nera.
Il modo migliore per farlo è programmare
l'applicazione Web in modo tale da non consentire l'iniezione e l'esecuzione
del codice.
Il modo migliore per farlo è utilizzare un'istruzione parametrizzata in
cui i dati e il codice sono separati.
Il modo migliore per mostrarti cosa
intendo è usare un esempio.
Sto mantenendo la minima quantità di programmazione in questo esempio.
Non voglio che sia un esempio di programmazione.
In realtà ci sono errori nella programmazione lì dentro,
ma sto cercando di darti il
concetto più di come programmarlo.
Il codice vulnerabile che stavamo esaminando era usato per fare questo.
In passato selezionava * dagli account in cui il nome utente è uguale a
quello inserito nella casella di testo 1.
Quindi inserivamo textbox1, mettiamolo
qui,
dicevamo admin e quindi chiudiamo
il preventivo.
Quindi siamo in grado di selezionare un sindacato
ed eseguire qualcos'altro.
Quindi, una volta terminato, aggiungevamo il commento che,
sostanzialmente, ignora tutto ciò che viene dopo.
Quindi, quando lo copi
e lo incolli qui,
vedrai cosa succede.
Ora, liberiamoci di questo
perché questo non rende i colori carini.
(borbotta), in realtà, aggiungerò un commento su questo.
Farà una selezione * dagli account in
cui il nome utente è uguale
a admin, union select ed eseguirà tutto ciò che vogliamo fare.
Questo è molto male ed è molto difficile proteggerlo.
Come ho detto, usando
filtri e cose, nasconderemo solo il problema, non lo risolveremo.
Il modo migliore
per farlo è usare le istruzioni con parametri proprio così.
Questo è il modo sicuro per farlo.
Prima di tutto, prepari la tua dichiarazione.
La maggior parte delle lingue come
PHP e tutte, in realtà, hanno una funzione del genere.
Puoi preparare selezionare * dagli account in cui il
nome utente è uguale al punto interrogativo.
Quindi si inviano i valori.
Quindi ora PHP lo sa.
L'istruzione SQL è selezionata * dagli account in cui
il nome utente è uguale a qualcosa.
Quindi prenderà il valore di textbox1.
Quindi, anche se entriamo e usiamo
la nostra dichiarazione molto subdola
proprio qui, e
la incolliamo lì, l'applicazione web saprà che il valore
per questo è admin union select.
In realtà, proverà ad
andare a selezionare * dagli account in cui il
nome utente, quindi, in realtà, aggiungerà le proprie
virgolette e proverà a trovare un nome utente con il seguente nome utente.
Tutta questa faccenda verrà eseguita in questo modo.
Quindi, sarà selezionato * dagli
account in cui il nome utente è uguale a admin union
select, questo hashtag.
Qualunque cosa tu inserisca nella casella di testo verrà inviata come valore.
L'applicazione Web saprà che questo è un
valore, non è un codice e non lo eseguirà mai.
Pertanto, questo ti proteggerà dalle iniezioni di SQL.
Puoi usare i filtri come seconda linea
di difesa e ti consiglio
anche di usare i privilegi minimi.
Per ogni database, utilizzare un utente con il
minor numero di privilegi desiderati.
Non consentire agli utenti di fare tutto ciò che vogliono.
Se si tratta di un sito Web semplice che effettua solo la
selezione, consenti solo all'utente di selezionare.
Se deve solo selezionare e inserire,
consenti solo loro di selezionare e inserire.
Questa è una regola che dovresti rispettare con tutto,
anche con i sistemi Linux.
Assicurarsi che le autorizzazioni siano sempre il meno possibile.
Ogni utente non ha autorizzazioni extra di cui
non ha bisogno.