神秘403错误

时间:2015-01-15 12:49:29

标签: php mysql http-status-code-403

我有一个PHP页面(其中一个)用于显示和更新mySQL数据库的内容。页面以非常简单的方式构建:单击Submit按钮重新加载页面,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">&nbsp;&nbsp;&nbsp;Remember to put &lt;hr class="guestbook"&gt; 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。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

之前我遇到过类似的问题,如果这是同样的问题,你的webhost已经安装了mod_security,或者更改了过滤器设置。

mod_security(以及其他)正在过滤所有请求变量(POST,GET等)。它检查常见的hacky sql注入字符串(如"; DELETE * FROM x WHERE 1),还检查通常用于黑客的字符串,并且留言簿和活动听起来像可以过滤的字符串。

您可以通过在.htaccess中添加以下行来关闭mod_security:

SecFilterEngine Off

或者,只为POST请求关闭它:

SecFilterScanPOST Off

编辑更好的方法是将其包含在<IfModule ...>语句中:

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>