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