2013-03-19 48 views
0

听起来像“订单拒绝,允许”和“订单允许,拒绝”之间的基本区别是前者是宽容的(“允许”指令优先,默认情况下允许任何人)而后者是禁止的(“拒绝”指令是优先的,默认情况下不允许任何人)。Apache“订单”指令理由

假设我理解正确,这是非常不直观的,我想知道为什么顺序指令这样工作。基本原理是什么?例如,这是某人关于表达访问控制的好方法吗?以不同的顺序处理请求是否具有计算优势?这是为了可扩展性吗?

回答

1

如果您正在进行非平凡的访问控制,则有时候两个规则会匹配相同的请求。当他们发生冲突时(即:一个人说“拒绝”,另一个说“允许”),你需要某种方式来决定哪一个优先。或者,会出现没有规则匹配的情况,并且您需要默认策略来涵盖这些情况。

在Apache中,它被称为Order,它的工作原理与此类似,主要是因为Apache决定处理访问控制。它处理它们的方式将规则分解为“允许”规则和“拒绝”规则。当一个请求到达,处理在概念上发生这样的:

  1. 阿帕奇首先运行拒绝规则如果订单deny,allow,或第一允许规则如果订单是allow,deny
  2. Apache运行其他规则。
  3. 最后一场比赛胜出。如果没有匹配,则Order中的最后一个操作是该策略。

(有明显一些优化这一进程。据说在allow,deny,如果允许规则不匹配,Apache的根本不屑与拒绝规则,因为它会已经无论如何拒绝该请求。同样地,如果deny,allow中没有匹配拒绝规则,则允许该请求(因为没有什么可以阻止它)。但从概念上讲,可以考虑运行这两套规则。)

我想应该有可能给每个规则一个优先参数或一些东西,并让管理员决定什么优先权给予一切。坦率地说,当你想要做的就是知道是允许还是拒绝某些东西时,这并不值得。既然通过给予“允许”或“拒绝”规则有机会根据处理顺序覆盖另一个规则,就可以很容易地完成,这就是他们所做的。但是不同的网站可能会要求另一套规则优先考虑,因此它们使其可配置。

+0

感谢您的回应,它有助于了解预期用途。我可以看到这个*在某些情况下可能会有用,但是我仍然遇到了麻烦,我的头绕着一个用例,在这个用例中,切换“Order”指令优先于第一个“Allow”或“Deny”指令遇到一个范围。后一种方法似乎更灵活,更直观。 – 2013-03-19 19:29:05

+0

问题是,虽然......当你有来自不同范围的规则时会发生什么?如果你有......说......全局默认策略,特定于站点的覆盖,特定于位置的规则,特定于目录的规则,* sub * -directory规则,.htaccess文件中的内容等等,直观性就会大打折扣。无论你如何处理它,你都会打破某人的用例。除非你给他们一个方法指定这些规则适用于给定网站的顺序......哦,等等...... :)原来,Order是这些简单的工作之一。任何更多的东西都必须证明其复杂性。 – cHao 2013-03-19 20:05:30

+0

我仍然怀疑,但我将其标记为正确的答案。谢谢。 – 2013-03-19 20:27:42