Это могло бы быть глупым вопросом. Или возможно мои навыки взламывания ограничены (я не практикую их вообще).
У меня есть запрос, который похож на это:
<?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;
?>
У меня есть много других тестов на $something
прежде чем это привыкнет, как $something = explode(' ',$something);
(которые позже приводят к строке), ни один из них не намеревается предотвратить инжекцию, но они мешают данной инжекции добираться, как к фактическому запросу. Однако существуют пути. Все мы знаем, как легкий это должно заменить пространство для чего-то еще, что все еще допустимо..
Так, это не действительно проблема, чтобы заставить потенциально вредную часть SQL достигнуть этого $something
... Но есть ли какой-либо способ прокомментировать остальную часть строки исходного запроса, если это - мультилиния?
Я могу прокомментировать AND table_z.field4 = '1'
использование ;--
но не может прокомментировать следующее AND table_z.field5 = '2'
Действительно ли возможно открыть многострочный комментарий /*
не закрывая его или что-то было похоже, и поэтому позвольте инжекции игнорировать многострочный запрос?
Это небезопасно. Даже если он не может закомментировать остальное, он может префикснуть его с SELECT * FROM my_table WHERE 1=1.
$something = "'; DROP TABLE table_x; SELECT * FROM table_z WHERE '1' = '1";
@Techpriester: это не то, что подготовленное заявление.
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html (старая версия, то же самое)
PDO - это уровень абстракции базы данных, который "готовит заявления", но подготовленное заявление - это нечто совершенно другое!
Используйте подготовленные операторы для обеспечения безопасности:
http://www.php.net/manual/en/pdo.prepare.php
Интерполяция строк всегда имеет риск инъекции кода, если ваши входные данные недостаточно очищены.
Устранение возможности выполнения произвольного кода - более простой И гораздо более безопасный путь.