apache Satisfy 指令有什么作用?

apache Satisfy 指令有什么作用?

我偶然发现了一个httpd.conf我无法理解的指令:

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
  Satisfy All
</Files>

根据文档,我会说这Satisfy没有任何效果,因为没有Allow。我错了吗?您认为该指令有什么作用?

答案1

我同意你的观点,满足所有要求没有任何作用——没有它,这些文件仍然会被拒绝。

答案2

TLDR;
在大多数情况下,这一行并不是绝对必要的,Satisfy All因为通常默认服务器设置。 如果既然如此,这条线就不是绝对必要的。

这行是为了额外的安全而添加的,“以防万一”服务器配置为使用Satisfy Any设置作为其默认设置。
如果服务器是故意使用该Satisfy Any设置设置的,你肯定通过包含Satisfy All指令来覆盖该设置以保护文件,例如.htaccess

我不确定 htaccess 文件是否会覆盖服务器针对某些 htaccess 文件或该文件下的所有文件夹的默认“Satisfy”指令。

对于互联网上发布的通用代码,尤其是当它告诉你如何正确保护.htaccess文件时,发布者很负责任,不会对您的服务器设置做出任何可能破坏文档安全性的假设。 包含该“额外”行可确保将更安全的设置应用于您的 htaccess 文件。添加该指令可使代码块 100% 地工作,而不是让 htaccess 文件暴露给少数配置不同的服务器。

根据Apache 文档

Satisfy Any|All

基于主机的访问限制和基于密码的身份验证可以同时实现。在这种情况下,Satisfy 指令用于确定这两组限制如何交互。

...用于<Directory><Files><Location>部分以及.htaccess

此指令仅在对特定区域的访问受到用户名/密码和客户端主机地址的限制时才有用。在这种情况下,默认行为(全部)是要求客户端通过地址访问限制并输入有效的用户名和密码。使用任何选项,如果客户端通过主机限制或输入有效的用户名和密码,则将被授予访问权限。

由于默认值通常Satisfy All(唯一的其他选项是Satisfy Any),当您包含该指令时,您可能不会注意到差异。但是,您的服务器配置文件(或?可能是父目录中的 .htaccess 文件?? - 我不确定这是否可能)可能会覆盖服务器默认值。无论哪种方式,添加指令Satisfy All始终确保应用正确的安全措施。

通过包含该Satisfy All指令,您可以确保这些文件的更高安全设置,而与服务器配置中的设置无关。

链接的文档提到了一些您可能想要使用的用例Satisfy Any

答案3

由于我无法发表评论,我在这里补充一点,@SherylHohman 的答案是最好的答案,因为它对于增加安全性很重要。因此,从技术上讲,说没有它就没有效果是不正确的(与公认的答案相反),因为你仍然必须考虑服务器配置的其余部分。不过,我想补充一下@SherylHohman 的回答:

  1. 服务器配置文件(例如/etc/httpd/conf/httpd.conf)可以有更通用的Satisfy Any语句。例如,这很重要,因为有人可能需要用户名/密码才能访问其服务器上的所有站点(例如通过Require group [name),然后允许通过特定 IP 或 IP 集绕过Allow from [ip],因此如果忽略这一点,.htaccess则会打开,因为Satisfy Any必须声明。

  2. 目录等于或高于特定.htaccess文件不会产生影响除非它们<Files>还包含一个专门匹配的部分.htaccess,然后会覆盖此规则,以及服务器配置也包含必要的AllowOverride指令(例如LimitAll)。我说它需要这样做是<File>因为这是服务器配置中使用的,并且这些是在<Directory>级别(即 root-level .htaccess)之后处理的。这是因为<File>部分内容稍后合并在我看来这.htaccess当然是在服务器配置之后处理的。

答案4

对我来说,当我尝试限制对我的应用程序在 AWS Elastic Beanstalk 上运行的 .htaccess 文件本身的访问时,我在配置文件中使用了以下代码片段:

<Files ~ "^.*.([Hh][Tt][Aa])"> 命令允许,拒绝 全部拒绝

它限制了完全访问。但是,我的网站开始崩溃,无法访问索引或登录页面。使用“满足所有要求”后,它运行得非常好。

<Files ~ "^.*.([Hh][Tt][Aa][Cc][Cc][Ee][Ss][Ss])"> 命令允许,拒绝 全部拒绝 全部满足

因此,在我看来,如果你希望服务器默认读取此文件但外部世界的访问应该被阻止,那么这一点很重要。

相关内容