我设置了以下指令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 ,则不会成功。Location
FilesMatch
.
例子:
<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>
块来限制对文件系统下的文件的访问何时使用部分。