Skrypt jest w PHP i jako DB używam MySQL. Oto sam skrypt.Czy to zapytanie jest bezpieczne od wtrysku sql?
$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);
Niektórzy ludzie mówią, że jeśli użytkownik przypisuje ;DROP TABLE blah;
ciąg do zmiennej $ unsafe_variable usuwa tabelę.
Ale próbowałem ten przykład,
http://localhost/test.php?user-input=DROP%20TABLE%20my_table
Ale nie usunąć tabelę, ale zamiast wstawiony nowy wiersz (;DROP TABLE blah;)
w tabeli.
Czy ktoś mógłby mi wytłumaczyć, jak można zaatakować ten skrypt za pomocą wtyczek sql?
'mysqli' lub' PDO' i ich sprawozdania przygotowanego będzie być lepszym wyborem. – Powerlord
Wielkie dzięki dla wszystkich uczestników pytania. Zdałem sobie sprawę, że tylko z 'sprintf' nie możemy być pewni, że nasze zapytanie jest bezpieczne od ** sql-injections **. W tym konkretnym przykładzie ani ja, ani uczestnicy nie mogli przedstawić sposobu wykonania iniekcji sql. Ale znalazłem dobry przykład sql, gdzie możemy wykonać sql-injection, nawet jeśli używamy 'sprintf'. Przykład sql można znaleźć [tutaj] (http://php.net/manual/en/function.mysql-real-escape-string.php "PHP Online Manual"). Zobacz sekcję "Przykład # 2 Przykładowy atak iniekcyjny SQL" – Bakhtiyor