【问题标题】:Limiting Access to a subdirectory, httpd.conf access is not allowed, don't want to create htaccess apart from root directory限制对子目录的访问,不允许httpd.conf访问,不想在根目录之外创建htaccess
【发布时间】:2012-09-18 04:53:07
【问题描述】:

我研究了很长时间,但找不到正确的答案。 我正在使用由000webhost.com 提供的免费 PHP 托管网站。 我在他们提供的 public_html 文件夹中有一个.htaccess。 目录结构有子目录,例如includes,如果用户直接访问URL,我不希望他们进入,应该说Forbidden - 403

我不希望 .htaccess 在我不想允许访问的每个子目录中。 我在某处读到 .htaccess 可以改变所有子目录及其本身的行为。

我知道在性能方面这不是一个好选择,但我无权访问 httpd.conf。

我认为有一些答案可以告诉我: 1. 将这些子目录移到 public_html 之外(不想那样做) 2.为每个子目录创建.htaccess并拒绝访问(这是痛苦的,不是一个可扩展的解决方案) 3.使用重写规则(可能是不确定的解决方案) 我希望有人能理解并帮助我。

非常感谢。

【问题讨论】:

  • 添加.htaccess有什么问题是几个子目录?您只需要在顶级目录中执行此操作。到底有多少?
  • 我认为总共有 4 个禁止目录。我不想要 4 个.htaccess 文件,我认为这会让我的生活变得悲惨:)

标签: php apache .htaccess web-applications


【解决方案1】:

确实,最安全的解决方案是将这些目录移到 DocumentRoot 之外。但是,您可以轻松地在 .htaccess 中添加重写规则以禁止访问:

RewriteEngine On
# Group many forbidden directories as (a|b|c|d)
RewriteRule ^(include|otherforbidden|someotherone) - [F]

除非您在下游有几十个目录需要管理,否则我认为在每个目录中删除特定于目录的 .htaccess 不会有什么大问题。

【讨论】:

  • 只是,就像 java 世界中的 web.xml 一样,您有一两个文件来控制行为并查看正在发生的事情,这使得管理更容易,耗时更少。非常感谢迈克尔,我会试试这个。
  • 你能告诉我 F 代表什么意思是 Forbidden 吗?
  • F 被禁止。请参阅the RewriteRule documentation中的标志部分
【解决方案2】:

RedirectMatch 403 ^/includes/.*$ 添加到您的根.htaccess 文件中,以将任何调用重定向到/includes 目录以强制出现403 Forbidden 错误。

但是,改用RedirectMatch 404 ^/includes/.*$ 会更安全,因为攻击者会收到 404 File Not Found 错误。这被认为更安全,因为 403 错误让攻击者知道有要攻击的文件。

【讨论】:

  • 好思想的杰夫。我得到了零件,它不会告诉它,文件夹是否真的存在。谢谢
  • 对不起,杰夫..但我只能选择一个答案作为批准的答案..我本可以做你的但是...
猜你喜欢
  • 2016-05-02
  • 2019-03-03
  • 2010-11-16
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
相关资源
最近更新 更多