$ _POST中的"wGeT"关键字

Neh*_*hal 0 php browser http

我正在开发一个小应用程序,管理员可以在后端插入批量折扣券代码.在前端,网站访问者可以逐个获取这些代码.要在后端插入优惠券代码,我向管理员提供一个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>
Run Code Online (Sandbox Code Playgroud)

Har*_*hof 6

我认为马里奥的评论是正确的,它可能是mod_security.

默认行为是扫描POST数据(参见/etc/httpd/conf/modsecurity.conf)

SecFilterScanPOST On
Run Code Online (Sandbox Code Playgroud)

与wget被阻止

# WEB-ATTACKS wget command attempt
SecFilter "wget\x20"
Run Code Online (Sandbox Code Playgroud)

注释掉这个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>
Run Code Online (Sandbox Code Playgroud)

我把两个选项放在一起,所以你可以稍微玩一下,它可能更具特定于网站,但你需要阅读一下mod_security规则

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