我如何让 FilesMatch 不阻止某些事情?

我如何让 FilesMatch 不阻止某些事情?

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 指令限制对不适当文件扩展名的访问,这些文件扩展名不应该是网站合法的一部分。

理由:

...

审计:

执行以下步骤来确定建议的状态是否已实现:

  1. 验证是否存在拒绝访问所有文件的 FilesMatch 指令,如补救措施第 3 步所示,并按照拒绝、允许的顺序进行操作。

  2. 验证是否存在另一个与补救措施第 4 步中的 FilesMatch 指令类似的指令,其表达式与批准的文件扩展名匹配。

补救措施:

执行以下操作来实现建议的状态:

  1. 编译 Web 服务器上现有文件扩展名的列表。以下 find/awk 命令可能有用,但可能需要根据 Web 服务器的适当 webroot 目录进行一些自定义。请注意,find 命令会跳过文件名中没有点 (.) 的任何文件,因为这些文件不是适当的 Web 内容。

    find */htdocs -type f -name '*.*' | awk -F. '{print $NF }' | sort -u

  2. 检查现有文件扩展名列表,查找适合 Web 服务器的内容,删除不合适的内容,并添加预计在不久的将来添加到 Web 服务器的任何其他文件扩展名。

  3. 添加下面的 FilesMatch 指令,默认情况下拒绝访问所有文件。

# Block all files by default, unless specifically allowed.

<FilesMatch "^.*$">

Require all denied

</FilesMatch>

  1. 添加另一个 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>

相关内容