背景 -
我的网站代码托管在Linux服务器上。我的网站允许雇主进行新注册(http://www.gymandspajobs.com/Employer/Employer.php)。填写的表单将通过“ / javascript”文件夹中的JavaScript进行验证,如果信息正常,则通过JavaScript HTTP请求对象提交数据,并通过“ / somefolder”文件夹中的PHP文件“ somefile.php”提交数据库将在根目录下插入。
问题-
当新用户尝试使用Firefox进行注册(我在WinXP SP2,Firefox-v3.5.2中进行了测试)时,我曾经获得的HTTP响应(我在JavaScript文件中点击了)
“您无权访问此服务器上的/somefolder/somefile.php。” 。
令人惊讶的是,相同的功能在IE7和Chrome浏览器中效果很好。
问题的最新更新-
我与我的网络托管人员联系,收到他们的答复后,我的问题似乎已经解决。
我们已为您的域禁用mod_security进行修复。我们已将以下行输入到您域的httpdocs目录下的.htaccess文件中。我们还验证并成功提交了雇主注册,没有任何问题。 ~~~~~ SecFilterEngine关闭~~~~~
尽管问题已解决,但我认为制作“ SecFilterEngine off
”可能不是解决此问题的最佳方法,因为它损害了安全性。因此,我问主持人,是否有一种方法可以保持mod_security的开启并让我的功能正常工作……这是他们的回复.....
问:我的代码有什么办法可以使mod_security保持打开状态?
Ans。有可能的。但这并不容易。您必须以某种方式修改文件中的代码,以使URI不应具有模式“ !(^application/x-www-form-urlencoded$|^multipart/form-data;)
”,因为我们在apache错误日志中找到了该条目-
mod_security-action:403
mod_security-message:使用代码403拒绝访问。HEADER(“ Content-Type”)上的模式匹配“ !(^application/x-www-form-urlencoded$|^multipart/form-data;)
”
我正在通过JavaScript使用HTTP对象和POST方法-
http.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
请指导我在上面的代码行中需要做哪些更改,以便可以将mod_security设置为ON,但我的注册表格仍然有效?
感谢致敬,
-Rupak Kharvandikar-
最佳答案
在这种情况下,最好的办法是威胁将特定警告视为误报,因为事实确实如此。请记住,在处理WAF时,mod_security不支持内容编码,误报是很正常的事情。
但是,仅针对一个误报禁用所有mod_security规则是愚蠢的。查找要触发的规则的ID,并禁用它“ SecRuleRemoveById”。在我的框中,我创建了一个额外的配置,以放置要禁用的所有规则。
modsecurity_crs_60_myignores.conf
SecRuleRemoveById 960903
SecRuleRemoveById 970903
SecRuleRemoveById 970902
关于php - apache mod_security说-访问被拒绝错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1283909/