0

我正在开发一个小型应用程序,管理员可以在其中在后端插入批量折扣券代码。在前端,网站访问者可以一一获取这些代码。为了在后端插入优惠券代码,我为管理员提供了一个 Textarea,他可以在其中一次插入所有优惠券代码。一切正常,直到我得到一个独特的优惠券代码"XXXXXX-XXX-XXX-wGeT"

我有一个简单的 HTML 表单,使用 POST 方法提交。提交此优惠券代码后,浏览器会在响应中向我发送“501-方法未实现”错误。问题在于代码中的“wGet”关键字。我知道 wget 是一个 linux 命令,但在这里我将它作为 POST 中的文本发送。服务器只是向我发送 501 错误。我用谷歌搜索了很多,但没有任何运气。在提交表单之前,如何转义这个“wGeT”关键字?

编辑:

<?php
if($_REQUEST){
    echo '<pre>';
    print_r($_REQUEST);
    echo '</pre>';
}
?>
<html>
    <head>
        <title>Wget Demo</title>
    </head>
    <body>
        <form name="frmCodes" method="POST">
            <textarea name="voucher_codes"></textarea>
            <input type="submit" name="btnSubmit"/>
        </form>
    </body>
</html>
4

1 回答 1

6

我认为马里奥的评论是对的,它可能是mod_security。

默认行为将扫描 POST 数据(请参阅 /etc/httpd/conf/modsecurity.conf )

SecFilterScanPOST On

wget 被阻止

# WEB-ATTACKS wget command attempt
SecFilter "wget\x20"

通过在此 SecFilter 前面加上 # 注释掉它(或将 SecFilterScanPOST 设置为 Off)并重新启动 apache 以查看它是否解决了它。

或使用相应目录中的.htaccess文件,其中包含:

<IfModule mod_security.c>
# Turn the filtering engine On or Off or DynamicOnly for cgi/php/etc
SecFilterEngine On

# Should mod_security inspect POST payloads
SecFilterScanPOST Off

# this rule allows wget but logs it so you can verify it if necessary
SecFilter "wget\x20" "log,pass"
</ifModule>

我把这两个选项都放进去了,这样你就可以稍微玩一下

轻微编辑:向.htaccess添加了一个 wget 允许但记录规则,这将允许您将 SecFilterScanPOST 设置为 On

于 2012-05-30T11:51:51.517 回答