mysql_real_escape_string ALONE può impedire nulla.
Inoltre, questa funzione non ha nulla a che fare con le iniezioni.
Se ha bisogno di fuggire, è necessario che nonostante la "sicurezza", ma solo perché è richiesto dalla sintassi SQL. E dove non ne hai bisogno, la fuga non ti aiuterà nemmeno un po '.
L'utilizzo di questa funzione è semplice: quando è necessario utilizzare una stringa tra virgolette nella query, è necessario sfuggire al suo contenuto. Non a causa di alcuni "utenti malintenzionati" immaginari, ma semplicemente per sfuggire a queste citazioni utilizzate per delimitare una stringa. Questa è una regola estremamente semplice, ma estremamente sbagliata dalla gente di PHP.
Questa è solo la funzione relativa alla sintassi, non correlata alla sicurezza.
A seconda di questa funzione in materia di sicurezza, ritenendo che "proteggerà il database dagli utenti malintenzionati" , il comporterà l'iniezione.
Una conclusione che si può fare da soli:
No, questa funzione non è sufficiente.
Le dichiarazioni preparate non sono un proiettile d'argento. Ti copre le spalle solo per metà dei possibili casi.Vedi lo important addition I made to the famous question per i dettagli
fonte
2012-03-22 11:30:07
In teoria si :) –
Per favore, per amore di Zaphod Beeblebrox, aggiornati alle istruzioni preparate tramite PDO o l'estensione mysqli. 'mysql *' è un dinosauro che non dovrebbe mai essere usato. Se così tanti siti "tutorial" non hanno continuato ostinatamente a usarlo, il team di sviluppo di PHP lo avrebbe già deprecato. I nuovi devoti a questa pratica arretrata vengono coniati ogni giorno perché non ne sanno di più e dopo tutto "il tutorial diceva che potevo farlo in questo modo". ** Le istruzioni preparate sono il modo corretto per prevenire l'iniezione SQL **. – rdlowrey
Fonte: http://news.php.net/php.internals/53799 – rdlowrey