问题描述
|
我遇到这样的问题:
403在PHP页面上禁止使用$ _GET参数编码的URL调用
我收到“禁止403”错误
当我像这样将URL作为GET变量传递时
http://script/test.PHP?url=https://stackoverflow.com/questions/ask
但这没关系。
http://script/test.PHP?url=stackoverflow.com/questions/ask
即使我使用urlencode网址,它仍然会给我一个403。
位于-----端口80的Apache mod_fcgid / 2.3.6 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635服务器
而且我不认为该服务器启用了mod_security,因为当我在htaccess中添加“ 2”时,我会收到“ 500 Internal Server Error”。
程式码片段:
$URL = MysqL_real_escape_string($_GET[\'url\']);
MysqL_query(\"INSERT INTO `url` ...\");
所以问题是,因为我没有root特权,所以可以不编辑httpd.conf来解决此问题。
谢谢
解决方法
您是否有权访问apache错误日志本身?如果这是cPanel系统,并且您具有外壳访问权限,请尝试查看日志/ usr / local / apache / logs / error_log-mod_security错误将出现在此处。否则,您可以在控制面板内部查看,看是否收到任何错误消息。
即使安装了mod_security,如果不允许将关键字SecFilterEngine放在.htaccess中,您仍然会出现500错误。
我建议与您的Web主机联系,以确定是否是mod_security。如果是这样,您可以要求他们创建一个例外。 (我在一家网络托管公司工作,我们几乎总是乐于为合理的应用程序提供mod_security例外)
如果是由mod_security引起的,并且您的虚拟主机不会创建异常,则您需要更改托管公司或寻找其他方法来传递url(base64编码可能对您有用)
, 对我来说,此问题的解决方案是让主机(hostgator)在我的站点上为mod_security创建一个例外。 mod_security \用于将某些类型的操作列入黑名单,无论出于何种原因,似乎包含URL(http://www.etc)的$ _GET请求都是其中之一。正如lunixbochs所说,大多数房东将很乐意为您解决问题。