$ _POST中的“wGeT”关键字

时间:2012-05-30 11:32:33

标签: php http browser

我正在开发一个小型应用程序,管理员可以在后端插入批量折扣优惠券代码。在前端,网站访问者可以逐个获取这些代码。要在后端插入优惠券代码,我向管理员提供一个Textarea,他可以在那里一次插入所有代码。一切都运转良好,直到我得到一个独特的优惠券代码“XXXXXX-XXX-XXX-wGeT”

我有一个简单的HTML表单,使用POST方法提交。在提交此优惠券代码时,浏览器会在响应中向我发送“501-Method not implemented”错误。问题在于代码中的“wGet”关键字。我知道wget是一个linux命令,但在这里我将它作为POST文本发送。服务器只是发送501错误。我google了很多,但没有任何运气。在表单提交之前如何转义此“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>

1 个答案:

答案 0 :(得分: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>

我把两个选项放在一起,所以你可以稍微玩一下,它可能更具针对性,但你需要在mod_security rules上阅读一下

轻微编辑:添加了一个wget允许但是将规则记录到.htaccess,这样就可以将SecFilterScanPOST添加到On