【问题标题】:Block access at folders starting with ~ and all of their folders/files阻止对以 ~ 开头的文件夹及其所有文件夹/文件的访问
【发布时间】:2015-10-25 08:03:06
【问题描述】:

编辑:我的问题的原因是 mod_userdir。因此,如果您的主机启用了类似 Hostgator 经销商包的 mod_userdir,例如 http://support.hostgator.com/articles/specialized-help/technical/apache-htaccess/mod_userdir,那么请确保您的主机可以禁用此功能。显然 Hostgator 拒绝为特定的托管包禁用此功能

最近我收到了来自 google 的网络钓鱼警告,该警告与我的服务器中不存在的文件有关。它出现在我的服务器上的原因是因为我使用的是共享/经销商 Apache 托管包。所以我发现如果我知道网站所有者的用户名,我可以访问与我的网站在同一服务器上托管的其他网站的任何文件。

意味着我可以访问

http://mywebsite.com/~somebodyelsesusername/any_path_to_their_files.php 

这种行为是不可取的,所以我想使用 .htaccess 拒绝通过我的域访问其他网站

如何在不知道接下来会发生什么的情况下阻止每个 根文件夹,例如 mydomain.com/~somefolder/ 以 ~ 开头?当然,我必须阻止对该文件夹的任何文件或文件夹的访问。我试过了

<DirectoryMatch "^\~|\/\~">
  Order allow,deny
  Deny from all
</DirectoryMatch>

但我想我做得不对。

下面的答案实际上回答了这个问题,但是由于特殊情况它并不能解决我的问题。所以我把它标记为正确,我会进一步调查这个问题

【问题讨论】:

  • 错误;我建议通过托管公司解决此问题,因为您的网站因此也可以通过其他人的域访问。这最终会导致谷歌出现重复内容处罚。
  • 我认为您是对的,为此我已联系托管公司 HG。但是我认为阻止通过其他域访问我的文件是一个不同的问题,它可能更容易,我现在正在处理它,否则我应该问一个单独的问题,如果我不能这样做

标签: regex apache .htaccess wildcard


【解决方案1】:

&lt;DirectoryMatch&gt;只能在服务器配置文件或虚拟主机上下文中使用,不能通过.htaccess。

您可以使用 mod_rewrite 阻止访问。确保模块已启用,然后使用以下指令:

RewriteEngine on
RewriteRule ^~ - [F,L]

【讨论】:

  • 是的 mod_rewrite 已启用,但解决方案不起作用
  • 你还有什么规定吗?在这种情况下,将其放在首位可能会有所帮助。如果没有,您能否通过尝试RewriteRule ^foo /bar [L] 并转到yoursite.com/foo 来测试是否允许重写。它应该告诉您 /bar 在此服务器上不存在。我以为~可以毫无问题地匹配,但我可能弄错了。不过我不能在这里测试。
  • 更新:我创建了一个根文件夹 ~somefolder 并尝试访问该文件夹 mywebsite.com/~somefolder 并且我得到一个 403 代码,所以你的答案有效,但这不适用于 mywebsite.com/~somebodyelsesusername 所以这让我什么都做不了?
  • 我猜在这种情况下,那些请求永远不会读取 .htaccess 文件。您可以通过在 .htaccess 文件中添加虚假内容并请求这些页面来轻松测试这一点。它应该为使用该 .htaccess 文件的任何页面提供内部服务器错误。如果文件从未被读取,那么您无法通过 .htaccess 解决问题。您可能无权访问主配置文件,因为它是共享主机设置。
  • 是的,我对其进行了测试,访问这些文件夹时不会考虑 htaccess 文件中的任何内容。您的回答是正确的,并且回答了问题,尽管它不能解决我的问题。我应该将其标记为答案并提出单独的问题,还是修改现有问题并等待更多答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2015-02-16
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多