【问题标题】:$_GET throws 403$_GET 抛出 403
【发布时间】:2019-04-12 07:27:54
【问题描述】:

我有一个使用 $_GET 解析 url 的简单自定义 MVC 应用程序,我已经让它在我的开发服务器以及使用 php 7.1 的几个不同的 webhosts 上运行......但我正在尝试使用 x10hosting 的免费的灯托管和从 $_GET 传递的数据以 403 的形式传递...

我已经证明它可以在其他服务器以及我自己的开发服务器上运行

echo '<pre>', $route->path, $_GET['url'], '</pre>'; 

当转到 url http://app/admin...时,我循环中的这一行给了我预期的结果...

/admin
adminadmin

但是在 x10 的服务器上我得到了这个

/403.shtml
admin403.shtml

我尝试使用 urlencode($_GET) 编码为 base64,并在 .htaccess 中禁用 mod_sec

<IfModule mod_security.c>
  SecFilterEngine Off
  SecFilterScanPOST Off
</IfModule>

这两种解决方案都不起作用...我几乎可以肯定这是一个服务器配置问题,但访问几乎仅限于 .htaccess 和 php.ini .... 我有一段时间没有接触过 php 或 apache,我是几乎没有丢失...任何帮助将不胜感激

【问题讨论】:

  • 在任何“免费”主机上,对.htaccess 和当然php.ini 的访问也将非常有限。我的“猜测”也可能是 mod_security 问题,可能基于 url 参数名称。尝试不同的名称。但我想你不能在你的“免费”主机上关闭 mod_security 。删除 &lt;IfModule&gt; 包装器 - 会发生什么?否则,您需要发布您的前端控制器,以便我们排除这种情况。
  • 我刚找到这个...看来我需要一个新主机...我正在使用免费预算,任何关于免费主机的建议,我可以 ftp 自定义 php 7.1 代码并禁用 mod_sec? x10hosting.com/community/threads/disable-mod_security.196777
  • 您是否尝试过更改 URL 参数名称? (您可以更改 URL 参数名称吗?)我在许多共享主机上遇到了 mod_sec 规则,这些规则只是根据请求中使用的某些参数名称来阻止请求。只需更改参数名称可能就足够了吗?
  • 我的天啊,哇哈哈……这有效……谢谢我的朋友,你治好了我的头痛
  • 不客气。我已将其添加为答案,因为它可能对其他人有所帮助。

标签: php .htaccess lamp


【解决方案1】:

这听起来像是一个 mod_security 类型的问题。而且,正如你所发现的,你是unable to disable mod_security on the free hosting platform

我在一些共享主机上遇到了 mod_sec 规则,这些规则只是根据某些参数名称来阻止请求(据说会阻止常见的 XSS 尝试)。 url 是一个常见的。 site 是另一个。只需更改参数名称即可。

“免费”托管帐户总是会有一些限制。如果这是唯一能阻止你的事情,那么你很幸运。

【讨论】:

  • 实际上修复它的最后一件事是停止使用 $_GET['url'] 进行路由...相反,我使用 $_SERVER['REQUEST_URI'] 来修复所有问题
猜你喜欢
  • 2013-11-16
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
相关资源
最近更新 更多