【发布时间】:2010-11-20 00:19:04
【问题描述】:
背景 -
我的网站代码托管在 linux 服务器上。我的网站允许雇主进行新注册 (http://www.gymandspajobs.com/Employer/Employer.php)。填写好的表格由文件夹“/javascript”中的 JavaScript 验证,如果信息正常,则通过 JavaScript HTTP 请求对象和 PHP 文件“somefile.xml”提交数据。 php”保存在根目录下的文件夹“/somefolder”中,数据库插入。
问题 -
当一个新用户尝试使用 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 开启?
回答。有可能的。但这并不容易。您必须修改文件中的代码,使 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 可以保持打开,但我的注册表单可以工作?
感谢和问候,
-Rupak Kharvandikar-
【问题讨论】:
标签: php javascript apache http-status-code-403 mod-security