【问题标题】:403 Forbidden when passing URL in GET variable在 GET 变量中传递 URL 时被禁止 403
【发布时间】:2011-06-15 06:56:12
【问题描述】:

我遇到了这样的问题:
403 Forbidden on PHP page called with url encoded in a $_GET parameter

我收到“403 禁止”错误 当我像这样将 url 作为 GET 变量传递时

http://script/test.php?url=https://stackoverflow.com/questions/ask

但这没关系。

http://script/test.php?url=stackoverflow.com/questions/ask

即使我对 url 进行 urlencode,它仍然会给我一个 403。

Apache mod_fcgid/2.3.6 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 服务器在 ----- 端口 80

而且我认为这个服务器没有启用 mod_security,因为当我在 htaccess 中添加 SecFilterEngine Off 时,我得到“500 Internal Server Error”。

代码sn-p:

$URL = mysql_real_escape_string($_GET['url']);
mysql_query("INSERT INTO `url` ...");

所以问题是,我可以在不编辑 httpd.conf 的情况下解决这个问题吗,因为我没有 root 权限。 谢谢

【问题讨论】:

  • 显示 test.php 文件中的一些代码
  • 先生,我添加了它,但我怀疑它是否相关,我用另一个文件尝试了它。

标签: php apache .htaccess


【解决方案1】:

您是否有权访问 apache 错误日志本身?如果这是一个 cPanel 系统并且您具有 shell 访问权限,请尝试查看日志 /usr/local/apache/logs/error_log - mod_security 错误将出现在那里。否则,您可以查看控制面板内部,看看它是否收到任何错误消息。

即使安装了 mod_security,如果关键字不被允许,在将 SecFilterEngine 放入 .htaccess 后仍然会出现 500 错误。

我建议联系您的网络主机以确定是否是 mod_security 的原因。如果是,您可以要求他们创建一个例外。 (我在一家网络托管公司工作,我们几乎总是乐于为合理的应用程序设置 mod_security 例外)

如果它是由 mod_security 引起的,并且您的虚拟主机不会创建异常,则您需要更改托管公司或找到其他方式来传递 url(base64 编码可能适合您)

【讨论】:

    【解决方案2】:

    对我来说,解决这个问题的方法是让我的主机 (hostgator) 在我的网站上为 mod_security 创建一个例外。 mod_security 用于将某些类型的操作列入黑名单,无论出于何种原因,似乎包含 url (http://www.etc) 的 $_GET 请求就是其中之一。正如 lunixbochs 所说,大多数主机都会很乐意为您解决问题。

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      相关资源
      最近更新 更多