Esto podría ser una pregunta estúpida. O tal vez mis habilidades de pirateo son limitadas (no las practico para nada).¿Son seguras las consultas multilínea sql-injection?
Tengo una consulta que tiene este aspecto:
<?php
$query =<<<eot
SELECT table_x.field1,
table_x.field2,
table_y.*,
table_z.field4
FROM (
SELECT ...
) as table_y
LEFT JOIN table_x
ON table_x.field1 = table_y.field_x
LEFT JOIN table_z
ON table_z.field1 = table_y.field_z
WHERE table_x.field3 = '$something'
AND table_z.field4 = '1'
AND table_z.field5 = '2'
eot;
?>
Tengo un montón de otras pruebas en $something
antes de que se utiliza, como $something = explode(' ',$something);
(que más tarde resulta en una cadena) ninguno de ellos tiene la intención de prevenir inyección, pero hacen que sea difícil para la inyección dada llegar a la consulta real. Sin embargo, hay maneras. Todos sabemos lo fácil que es reemplazar un espacio por otra cosa que todavía es válida.
Por lo tanto, no es realmente un problema hacer que una parte potencialmente dañina de SQL alcance ese $something
... ¿Pero hay alguna forma de comentar el resto de la cadena de consulta original si es multilínea?
que puedo comentar AND table_z.field4 = '1'
usando ;--
pero no puedo comentar lo siguiente AND table_z.field5 = '2'
¿Es posible abrir un comentario de varias líneas /*
sin cerrar o algo parecido y por lo tanto permitir la inyección de ignorar la multi- consulta de línea?
Gracias Adam, tienes razón. Es fácil piratear esta consulta multilínea. Lástima de mí por no ver esa opción. Esto es sin embargo un ejemplo y mi situación es un poco más complicada. Como no me explico, aceptaré tu respuesta como correcta. – acm