FilesMatch 阻止了某些不该阻止的内容。我有以下配置:
<FilesMatch "^.*$">
Deny from all
</FilesMatch>
<FilesMatch ".+\.(html?|cgi|shtml|phtml|js|php|css|[Jj][Pp][Ee]?[Gg]|[Gg][Ii][Ff]|[Pp][Nn][Gg]|ico|xml|wsdl)$">
Order deny,allow
Allow from all
Satisfy Any
</FilesMatch>
但是当我使用它时,我无法访问:
www.example.com/example/
www.example.com/example/?hello
我以为 FilesMatch 只针对文件进行操作。我做错了什么?
编辑:
我想要实现的是满足 Apache http 服务器 2.2 的 Cisecurity 基准测试中的要求 5.11。可以在这里找到:https://www.cisecurity.org/cis-benchmarks/
摘自文档:
描述:
使用 FilesMatch 指令限制对不适当文件扩展名的访问,这些文件扩展名不应该是网站合法的一部分。
理由:
...
审计:
执行以下步骤来确定建议的状态是否已实现:
验证是否存在拒绝访问所有文件的 FilesMatch 指令,如补救措施第 3 步所示,并按照拒绝、允许的顺序进行操作。
验证是否存在另一个与补救措施第 4 步中的 FilesMatch 指令类似的指令,其表达式与批准的文件扩展名匹配。
补救措施:
执行以下操作来实现建议的状态:
编译 Web 服务器上现有文件扩展名的列表。以下 find/awk 命令可能有用,但可能需要根据 Web 服务器的适当 webroot 目录进行一些自定义。请注意,find 命令会跳过文件名中没有点 (.) 的任何文件,因为这些文件不是适当的 Web 内容。
find */htdocs -type f -name '*.*' | awk -F. '{print $NF }' | sort -u
检查现有文件扩展名列表,查找适合 Web 服务器的内容,删除不合适的内容,并添加预计在不久的将来添加到 Web 服务器的任何其他文件扩展名。
添加下面的 FilesMatch 指令,默认情况下拒绝访问所有文件。
# Block all files by default, unless specifically allowed.
<FilesMatch "^.*$">
Require all denied
</FilesMatch>
- 添加另一个 FilesMatch 指令,允许访问步骤 2 中审核流程明确允许的文件扩展名。下面是 FilesMatch 指令的示例。正则表达式中的文件扩展名应与您的批准列表匹配,而不一定与下面的表达式匹配。
# Allow files with specifically approved file extensions
# Such as (css, htm; html; js; pdf; txt; xml; xsl; ...),
# images (gif; ico; jpeg; jpg; png; ...), multimedia
<FilesMatch "^.*\.(css|html?|js|pdf|txt|xml|xsl|gif|ico|jpe?g|png)$">
Require all granted
</FilesMatch>
当然,我必须修改“Require all grant”,因为我使用的是 Apache 2.2
答案1
这将拒绝访问除您在FilesMatch
指令中指定的文件之外的所有文件:
Order Allow,Deny
<FilesMatch ".*\.(html|php)$">
Allow from all
</FilesMatch>