Lo script è in PHP e come DB utilizzo MySQL. Ecco la sceneggiatura stessa.Questa query è sicura da SQL injection?
$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);
Alcuni dicono che se l'utente assegna ;DROP TABLE blah;
stringa alla variabile $ unsafe_variable si elimina la tabella.
Ma provato questo esempio,
http://localhost/test.php?user-input=DROP%20TABLE%20my_table
Ma non eliminare la tabella invece inserita una nuova riga (;DROP TABLE blah;)
nella tabella.
Qualcuno potrebbe spiegarmi come è possibile attaccare questo script con iniezioni SQL?
'mysqli' o' PDO' e le loro dichiarazioni preparate sarebbe essere una scelta migliore – Powerlord
Grazie mille per tutti i partecipanti alla domanda. Mi sono davvero reso conto che con solo 'sprintf' non possiamo essere sicuri che la nostra query sia al sicuro da ** sql-injection **. Per questo specifico esempio né io né i partecipanti potremmo presentare il modo in cui eseguire sql-injection. Ma ho trovato un buon esempio in SQL dove possiamo eseguire sql-injection anche se usiamo 'sprintf'. L'esempio sql può essere trovato [qui] (http://php.net/manual/en/function.mysql-real-escape-string.php "Manuale PHP online"). Vedere la sezione di "Esempio n. 2 Un esempio di attacco di iniezione SQL" – Bakhtiyor