Вот минимальный рабочий пример проблемы, с которой я столкнулся. Я знаю, что ошибка, похоже, связана с моим сервером/настройкой, но мне все еще интересно, что происходит. Есть два файла, 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.