如何告诉 Apache 不要覆盖 LocationMatch 和“要求全部拒绝”?

如何告诉 Apache 不要覆盖 LocationMatch 和“要求全部拒绝”?

我设置了以下指令security.conf来阻止 apache 提供任何隐藏文件或目录。

<LocationMatch ^(.*/)\..*>
    Require all denied
</LocationMatch>

以下000-default.conf指令通过 HTTP 认证来保护整个站点。

<Location />
    AuthUserFile /var/www/site/.htpasswd
    AuthName "Restricted Area"
    AuthType Basic
    Require valid-user
</Location>

现在,当我登录时,它<LocationMatch ^(.*/)\..*>会被完全忽略。我尝试过:

<Location />
    ...
    Satisfy all
</Location>

..没有成功:(

答案1

正如 @HBruijn 指出的那样,问题实际上来自于 Apache 合并不同部分的方式,以及混合基于文件系统的限制(例如<Directory><Files>)和基于 URI 路径的限制(例如 )所带来的困难<Location>。使用其中任一种而不是同时使用两者更安全、更容易,因为其中一种可以完全覆盖另一种。

例如,在 Apache v2.4 中,如果您在上面的示例中使用Directory而不是 ,并使用来拒绝访问以 开头的文件,则应该可以正常工作。但是,如果您尝试同时使用 Location ,则不会成功。LocationFilesMatch.

例子:

<FilesMatch "^\..+$">
  require all denied
</FilesMatch>

<Directory /path/to/your/docroot>
  AuthUserFile /var/www/site/.htpasswd
  AuthName "Restricted Area"
  AuthType Basic
  Require valid-user
</Directory>

请注意,@HBruijn 链接的页面中实际上有一个警告,不要尝试使用<Location>块来限制对文件系统下的文件的访问何时使用部分。

相关内容