Вот минимальный рабочий пример проблемы, которую я имею. Я знаю, что к настоящему моменту ошибка, похоже, характерна для моего сервера / установки, но мне все еще интересно, что происходит. Есть два файла, m1.php и m2.php:
m1.php
<form action="m2.php" method="post">
<br> <input type="text" name="j" />
<input type="submit" VALUE="Ok" />
</form>
m2.php
<?php
print_r($_POST);
?>
Все работает как положено (когда вы нажимаете ОК, он печатает массив со значением из поля ввода) с этим исключением: если строка, которую я печатаю,
VALUE';WAITFOR DELAY '00:00:24';--
форма не обрабатывается. Удаление только одного символа из приведенной выше строки работает без проблем.
Проверка журналов сервера, когда указанная выше строка является входной, в журнале не появляется запрос POST, в то время как он поступает с любой другой строкой, которую я могу придумать. Проблема, похоже, на стороне сервера, так как Fiddler показывает POST-запрос с содержимым
j=VALUE%27%3BWAITFOR+DELAY+%2700%3A00%3A24%27%3B--
и я мог бы воспроизвести его в разных браузерах с разных платформ. Это проблема с Apache? Может быть, php? Как я мог сказать?
Я обнаружил это во время аудита безопасности на веб-сайте. Сервер SQL не запущен, но аудит сообщает об этой проблеме. И мне любопытно, почему именно эта строка вызывает такое поведение.
Редактировать: в случае, если кому-то интересно, я просто заметил, что описанное выше поведение вообще не зависит от кода php. Фактически, если я отправлю через Fiddler POST-запрос на несуществующую страницу на моем сервере, если содержимое публикации содержит поле с вышеупомянутой строкой, запрос остается без ответа. Так что, похоже, это проблема Apache.