Apache 中的访问控制指令的小困惑

Apache 中的访问控制指令的小困惑

对我的服务器的访问控制定义如下:

Order allow,deny
Allow from 127.0.0.1

这正是我想要的效果。首先,只允许来自本地计算机的访问,然后拒绝其他所有访问。但我发现很多示例会执行类似这样的操作:

Order deny,allow
Deny from all
Allow from 127.0.0.1

这更有意义。首先,所有访问都被拒绝,然后只允许本地访问。

我的问题是,它们是否等效并且做完全相同的事情?在我看来,它们是等效的,但我只是想确保它们完全相同。如果不是,它们有何不同?我应该选择哪一个才能仅允许访问我的本地计算机?

答案1

是的,它们在提供相同结果方面是等效的,只允许从 127.0.0.1 进行访问。让我引用关于订单指令的文档

允许否认

首先,评估所有 Allow 指令;至少必须有一个匹配,否则请求将被拒绝。接下来,评估所有 Deny 指令。如果有任何匹配,则请求将被拒绝。最后,任何不匹配 Allow 或 Deny 指令的请求都将被默认拒绝。

否认允许

首先,评估所有 Deny 指令;如果匹配,则请求将被拒绝,除非它还匹配 Allow 指令。任何不匹配任何 Allow 或 Deny 指令的请求都会被允许。

答案2

我不相信它们实际上是相同的,因为在您的第一个例子中,您没有明确拒绝任何主机(不确定 Apache 默认为什么)。

您展示的第二个更常规的示例是正确的,它仅允许本地主机访问 Web 服务器。这是因为 Apache 中的访问控制指令是按照以下顺序应用的:命令指令。因此,使用“deny,allow”时,首先应用拒绝指令,然后应用任何允许指令。在这种情况下,首先阻止所有主机,然后允许 127.0.0.1。除了 localhost,其他任何主机都无法进入。如果您只反转顺序,使其成为“allow,deny”,则意味着首先允许 127.0.0.1,然后阻止所有主机。这意味着根本没有人可以访问 Web 服务器(甚至 localhost 也不行)!

就把它想象成白名单/黑名单。在“拒绝、允许”的情况下全部拒绝你实际上是在创建一个白名单,列出你希望能够访问服务器的用户,每个用户允许来自 X你添加。如果你使用“allow,deny”允许所有人并添加拒绝 X您可以创建一个黑名单,将那些您特别不希望其访问网络服务器的人列入其中。

相关内容