我正在开发一个小应用程序,管理员可以在后端插入批量折扣券代码.在前端,网站访问者可以逐个获取这些代码.要在后端插入优惠券代码,我向管理员提供一个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)
我认为马里奥的评论是正确的,它可能是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
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |