У меня есть страница PHP (одна из многих), которая используется для отображения и обновления содержимого базы данных MySQL. Страница построена очень простым способом: нажатие кнопки «Отправить» перезагружает страницу, программа PHP обновляет базу данных, и страница снова отображается с новым содержимым.
Внезапно сегодня я столкнулся с проблемой. При первом открытии страница в порядке, но после нажатия кнопки «Отправить» я получаю ошибку 403. Эта ошибка появляется перед запуском PHP, потому что база данных не обновляется.
Другие похожие страницы не имеют такой же проблемы, поэтому я работал с файлом, удаляя биты, пока проблема не исчезла. Был сделан вывод, что проблема связана с двумя входными данными формы (всего около 20). Код для одного из этих проблемных входов
<tr class="formspace">
<td valign="top" class="formleft"><br>
<br>
From the Hotel Guestbook</td>
<td colspan="2"><textarea name="guestbook" cols="60" rows="4" wrap="VIRTUAL" id="guestbook"><?php echo $row_hotel['guestbook']; ?></textarea>
<span class="formnote"> Remember to put <hr class="guestbook"> between the paras.</span>
</td>
</tr>
Тем не менее, этот не вызывает проблем
<tr class="formspace">
<td valign="top" class="formleft"><br>
<br>
Restaurant</td>
<td colspan="2"><textarea name="restaurant" cols="60" rows="4" wrap="VIRTUAL" id="restaurant"><?php echo $row_hotel['restaurant']; ?></textarea></td>
</tr>
Два поля с именами проблем — «гостевая книга» и «действия», которые кажутся довольно неточными и не должны конфликтовать ни с чем другим.
Разрешения для файла точно такие же, как и все остальное, что работает. 644 для файла и 755 для папки, в которой он находится.
Я что-то упускаю из виду?
Ранее я сталкивался с подобными проблемами, и если это та же проблема, ваш веб-хост установил mod_security или изменил настройки фильтра.
Что делает mod_security (среди прочего), так это фильтрует все переменные запроса (POST, GET и т. Д.). Он проверяет распространенные хакерские строки SQL-инъекций (например, "; DELETE * FROM
ИксWHERE 1
), но также строки, которые обычно используются для взлома, а гостевая книга и действия звучат как строки, которые можно фильтровать.
Вы можете отключить mod_security, добавив следующие строки в ваш .htaccess:
SecFilterEngine Off
Или просто отключить его для запросов POST:
SecFilterScanPOST Off
РЕДАКТИРОВАТЬ лучше обернуть его внутри <IfModule ...>
заявление:
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
Других решений пока нет …