Oli*_*ver 2 apache .htaccess server-configuration protection
我试图通过一个简短的测试例子来理解这些order deny,allow语句如何反应我看到的东西,直到现在.
我有以下网站结构进行测试:
将/index.htm
/.htaccess(1)
/subfolder/index.htm
/subfolder/.htaccess(2)
.htaccess(1)
order deny,allow
allow from all
Run Code Online (Sandbox Code Playgroud)
子文件夹/ .htaccess(2)
order deny,allow
deny from all
Run Code Online (Sandbox Code Playgroud)
无论我在2 .htaccess文件中使用allow,deny/deny,allow(以及所有4种可能的组合)的顺序,我都不会被允许访问子文件夹/ index.htm.
根据我的理解,至少有一个组合,其中根allow from all在子文件夹上获胜deny from all,所以我不明白为什么我不能在这个如此简单的例子上做到这一点.
你能解释一下为什么以及发生了什么吗?
规则order deny,allow并order allow,deny定义处理deny from和allow from指令的顺序.处理所有允许和拒绝规则,最终相关规则覆盖任何先前的规则.请参阅mod_authz_host模块文档的Order Directive部分以进行确认.
请注意,处理所有Allow和Deny指令,与典型防火墙不同,后者仅使用第一个匹配.最后一次匹配是有效的(也与典型的防火墙不同).此外,行在配置文件中出现的顺序并不重要 - 所有允许行都作为一个组处理,所有拒绝行都被视为另一个,并且默认状态由其自身考虑.
例如,如果我们在允许规则之前处理拒绝规则,我们可以有效地创建允许的IP地址的白名单.
order deny,allow
deny from all
allow from 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
相反,在以下示例中,我们在拒绝规则之前处理允许规则,用于拒绝IP地址的黑名单.
order allow,deny
allow from all
deny from 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
子目录将继承父目录的规则,除非它们声明自己的规则.如果子目录使用order指令或allow/deny指令,则不会继承父级的规则.有关此行为的确认,请参阅本文档的" 合并配置节"部分的错误52406.
对于未实现任何合并逻辑的模块,例如mod_access_compat,后面部分中的行为取决于后一部分是否具有来自模块的任何指令.继承配置,直到进行更改,此时配置被替换而不是合并.
您也可以执行此简单测试以确认此行为.
将以下行放在父目录中.htaccess.
order deny,allow
deny from all
Run Code Online (Sandbox Code Playgroud)
以及子目录中的以下任何或所有行.htaccess.
order deny,allow
deny from 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
您将看到子目录现在可公开访问,即使父目录包含deny from all且子目录没有allow from指令.
根据文档和实验,似乎父目录不可能以任何方式覆盖子控制器的指令.
| 归档时间: |
|
| 查看次数: |
2227 次 |
| 最近记录: |