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_*
!