Po pierwsze, nazywa się to SQL-Injection . Jest to po prostu możliwość zmiany zapytań w bazie danych za pomocą danych wejściowych użytkownika.
Spójrzmy na przykład:
Zapytanie:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Teraz przypiszemy VAR1 wartość:'; DROP TABLE *; -- A my otrzymamy:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Z mysql_real_escape_string wyglądałoby to tak:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string „zabezpiecza” ciąg do użycia w zapytaniu.
Ale w końcu powinieneś przestać używać mysql_* razem . Są przestarzałe i uważane za niebezpieczne, jeśli chodzi o zapobieganie wstrzykiwaniu SQL lub innym sposobom łagodzenia zapytań.
Powinieneś po prostu przestać łączyć zapytania w ten sposób i zacznij używać przygotowanych wyciągów , które nie tylko są łatwiejsze w użyciu, domyślnie zapobiegają wstrzykiwaniu SQL, ale także mogą poprawić szybkość Twojej aplikacji.
Dla PHP istnieją dwa rozszerzenia, które mają na celu zamknięcie całego mysql_* otwarte:
I powtarzam to jeszcze raz:Przestań używać mysql_* !