我偶然发现了一个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 的回答:
服务器配置文件(例如
/etc/httpd/conf/httpd.conf
)可以有更通用的Satisfy Any
语句。例如,这很重要,因为有人可能需要用户名/密码才能访问其服务器上的所有站点(例如通过Require group [name
),然后允许通过特定 IP 或 IP 集绕过Allow from [ip]
,因此如果忽略这一点,.htaccess
则会打开,因为Satisfy Any
必须声明。目录等于或高于特定
.htaccess
文件不会产生影响除非它们<Files>
还包含一个专门匹配的部分.htaccess
,然后会覆盖此规则,以及服务器配置也包含必要的AllowOverride
指令(例如Limit
或All
)。我说它需要这样做是<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])"> 命令允许,拒绝 全部拒绝 全部满足
因此,在我看来,如果你希望服务器默认读取此文件但外部世界的访问应该被阻止,那么这一点很重要。