El script está en PHP y como DB uso MySQL. Aquí está el script en sí.¿Esta consulta es segura desde la inyección sql?
$unsafe_variable = $_GET["user-input"];
$sql=sprintf("INSERT INTO table (column) VALUES('%s')",$unsafe_variable);
mysql_query($sql);
Algunas personas dicen que si el usuario asigna ;DROP TABLE blah;
cadena a la variable $ unsafe_variable se elimina la tabla.
Pero traté este ejemplo,
http://localhost/test.php?user-input=DROP%20TABLE%20my_table
Pero no eliminó la mesa, pero en cambio inserta una nueva fila en la tabla (;DROP TABLE blah;)
.
¿Alguien podría explicarme cómo es posible atacar este script con inyecciones de sql?
'' mysqli' o PDO' y sus declaraciones preparadas haría ser una mejor opción. – Powerlord
Muchas gracias a todos los participantes de la pregunta. Realmente me di cuenta de que con solo 'sprintf' no podemos estar seguros de que nuestra consulta esté a salvo de ** sql-injections **. Para este ejemplo específico ni yo ni los participantes podríamos presentar la forma de ejecutar sql-injection. Pero he encontrado un buen ejemplo de SQL donde podemos ejecutar inyección sql incluso si usamos 'sprintf'. El ejemplo sql se puede encontrar [aquí] (http://php.net/manual/en/function.mysql-real-escape-string.php "PHP Online Manual"). Consulte la sección de 'Ejemplo # 2 Un ejemplo de ataque de inyección SQL' – Bakhtiyor