La classe mysqli in PHP protegge il 100% dalle iniezioni di sql?
-
03-07-2019 - |
Domanda
Ho visto molti articoli e domande su mysqli e tutti sostengono che protegge dalle iniezioni di sql. Ma è a prova di sciocco o c'è ancora un modo per aggirarlo. Non mi interessano gli script di cross site o gli attacchi di phishing, ma solo iniezioni di sql.
Quello che avrei dovuto dire per cominciare è che sto usando dichiarazioni preparate. Questo è ciò che intendevo con mysqli. Se uso istruzioni preparate senza alcuna concatenazione di stringhe, allora è infallibile?
Soluzione
Ma è una prova folle o c'è ancora un modo per aggirarlo.
No, devi sapere cosa stai facendo. Se si utilizzano parametri associati (una funzionalità fornita da MySqli), si è completamente al sicuro dagli attacchi del tipo di iniezione da questo vettore di attacco . Ciò non impedisce a te - il programmatore - di incorporare direttamente le stringhe e quindi di abilitare gli attacchi di iniezione. Devi usare la funzione come previsto.
Ri: Modifica
Quello che avrei dovuto dire per cominciare è che sto usando dichiarazioni preparate. Questo è ciò che intendevo con mysqli. Se uso istruzioni preparate senza alcuna concatenazione di stringhe, allora è infallibile?
Foolproof è ancora una parola così pericolosa. Ma sei al sicuro dagli attacchi di iniezione per le variabili associate a istruzioni preparate. Questo perché i parametri associati vengono trasmessi separatamente dalla query SQL. Con il "tradizionale" approccio string-embed, il server di database deve analizzare l'input e ci sono molti casi limite (Charset ecc.). Quando i dati e la query vengono inviati separatamente, non viene eseguita alcuna analisi effettiva (almeno non l'analisi dei dati variabili).
Altri suggerimenti
Non protegge dalle iniezioni di sql meglio del vecchio modulo mysql, ma lo rende più semplice per lo sviluppatore, che ora può usare istruzioni preparate invece di chiamare mysql_real_escape_string.