Sí, es definitivamente posible.
Si usted tiene una forma en la que espera un entero a su próxima instrucción SELECT, entonces se puede introducir algo similar:
SELECT * FROM thingy
DONDE attributeID =
- 5 (buena respuesta, no hay problema)
- 5; DROP table
users
; (malo, malo, malo ...)
El siguiente sitio web detalla otras técnicas clásicas de inyección SQL: SQL Injection cheat sheet.
El uso de consultas parametrizadas o procedimientos almacenados no es mejor. Estas son solo consultas pre-hechas usando los parámetros pasados, que también pueden ser una fuente de inyección. También se describe en esta página: Attacking Stored Procedures in SQL.
Ahora, si suprime la cita simple, evitará solo un determinado conjunto de ataques. Pero no todos ellos.
Como siempre, no confíe en los datos provenientes del exterior. Filtrarlos en estos 3 niveles:
- nivel de interfaz para cosas obvias (un menú desplegable de selección de lista es mejor que un campo de texto libre)
- nivel lógico de los controles relacionados con la naturaleza de datos (int, string, longitud) , permisos (este tipo de datos pueden ser utilizados por este usuario en esta página) ...
- Nivel de acceso a la base de datos (cita simple de escape ...).
Diviértete y no olvides marcar WikiPedia para obtener respuestas.
/Vey
Cabe señalar que solo ocurre si su sistema le permite ejecutar múltiples consultas SQL a la vez. PHP 'mysql_query' no. – DisgruntledGoat