2012-05-30 94 views
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> 
+3

它是纯文本。它不需要转义。你需要找出是什么导致了错误(这可能是一些偏执的安全过滤器),并修复它,而不是试图解决它。 – Quentin

+0

你可以展示一些更多的代码,并解释你所在的服务器 - 这听起来不太像听起来那么简单,我怀疑wget的事情只是一个巧合。最后用'wTeG'和'less'来尝试它,以验证它是否只有wget。 –

+2

可能是或可能不是mod_security错误。 – mario

回答

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为开

+0

我在共享主机,所以我不认为我可以配置这个modsecurity.conf文件。需要找到其他的选择。 – Nehal

+0

你可以放入一个.htaccess文件,我会调整我的帖子以显示它 –