要求所有拒绝无效。要求所有允许,有效

要求所有拒绝无效。要求所有允许,有效

我有一个如下的网站结构设置,我正在尝试组织每个网站的访问级别,但没有指定,<Directory>因为这需要修复结构(也就是说,如果我将其复制到不同的网站,复制到子文件夹中,则需要编辑所有.htaccess 到新位置)。

  • /应用程序/- 允许所有,拒绝配置/等等
  • /应用程序/模板/- 全部拒绝
  • /应用程序/模板/mytheme/- 仅允许所有图像、javascript、css、字体
  • /应用程序/lib/- 全部拒绝

我曾尝试实施 Apache2.4 的新指令方案:

/etc/apache2/conf-enabled/security.conf

... more stuff above ...

<Directory />
   AllowOverride All
   Require all denied
</Directory>

... more stuff below ...

并在应用程序的根目录中添加Require all allowed到,同时在我希望拒绝访问的文件夹中添加到。.htaccessRequire all denied.htaccess

问题Require all denied似乎什么都没做。我见过使用mod_auth_compat或任何库的参考,但它似乎只对旧版本的 apache (v2.3) 是必需的。

我在 Debian 8 上使用 Apache 2.4。

此前,我会提供:

Order Allow, Deny
Deny from all

然后将以下内容放入需要访问权限的文件夹中:

Allow from all

..我需要只允许特定文件类型的访问,

<FilesMatch "\.(jpg|jpeg|gif|png|bmp|svg|css|less|sass|scss|js|ttf|woff|woff2|eot)$">
    Allow from all
</FilesMatch>

根据 apache 的文档,混合使用新旧声明可能会产生意外结果,因此,我只使用新声明。没有杂散.htaccess文件或*.conf使用旧声明格式加载的文件 - 所以这应该有效?

鉴于我布置的文件夹结构,以及'/etc/apache2/conf-enabled/security.conf'中加载的内容(因为这是 AllowOverride 的“根”声明所在的位置[AllowOverride All在网站配置文件(000-default.conf)中以相同格式指定声明时似乎不起作用],有人可以提供一些指导或最好是解决该问题的方法。

答案1

请参阅带有该指令示例的升级指南Requirehttps://httpd.apache.org/docs/trunk/en/upgrading.html

  • Deny from all就是现在Require all denied
  • Allow from all就是现在Require all granted

剧情转折:Apache 2.4 默认不授予对任何目录的访问权限,并且评估顺序已经改变。

Directory /在 apache 2.2 中,用+来阻止对文件系统的访问是很常见的,Require all denied就像您写的那样。现在应该将其删除。如果它取代了子目录中的权限,就会适得其反。

请参阅有关合并身份验证限制的文档。实际操作起来非常复杂。https://httpd.apache.org/docs/trunk/en/mod/mod_authz_core.html#authmerging

在子目录中, in先于Require all grantedin/app被评估。看起来 apache 在满足第一个允许规则时授予访问权限,因此允许访问。整个树由父级上的指令打开,对此您无能为力。Require all denied/app/lib

我的建议是不要混合公共和私人内容。这在实践中是完全无法管理的。如果它被提供,它就应该被提供。

相关内容