Prima di tutto, si chiama SQL-Injection . Fondamentalmente è solo la possibilità di modificare le query sul database tramite l'input dell'utente.
Diamo un'occhiata ad un esempio:
Domanda:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Ora assegneremo a VAR1 il valore di:'; DROP TABLE *; --
E otterremo:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Con mysql_real_escape_string
sarebbe simile a questo:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'protegge' una stringa per l'utilizzo all'interno di una query.
Ma alla fine, dovresti smettere di usare mysql_*
del tutto . Sono deprecati e considerati non sicuri quando si tratta di impedire l'iniezione di SQL o altri mezzi per moderare le query.
Dovresti semplicemente smettere di concatenare le query insieme in questo modo e inizia a utilizzare dichiarazioni preparate , che non solo sono più facili da usare, prevengono SQL Injection per impostazione predefinita, ma possono anche migliorare la velocità della tua applicazione.
Per PHP ci sono due estensioni progettate per chiudere l'intero mysql_*
aperto:
E lo ripeto:Per favore, smetti di usare mysql_*
!