0

听起来“命令拒绝,允许”和“命令允许,拒绝”之间的基本区别是前者是允许的(“允许”指令优先,默认允许任何人)而后者是禁止的(“拒绝”指令有优先级,默认情况下不允许使用任何指令)。

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

4

1 回答 1

1

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

在 Apache 中,它被称为Order,并且像它一样工作,主要是因为 Apache 决定如何处理访问控制。它处理它们的方式,规则分为“允许”规则和“拒绝”规则。当一个请求进来时,处理在概念上是这样发生的:

  1. 如果顺序是, Apache 首先运行拒绝规则,如果顺序是deny,allow,则首先运行允许规则allow,deny
  2. Apache 运行其他规则。
  3. 最后一场比赛获胜。如果没有匹配项,则 中的最后一个操作Order是策略。

(这个过程显然有一些优化。假设在 中allow,deny,如果不匹配允许规则,Apache 甚至不会打扰拒绝规则,因为它已经拒绝了请求。同样,如果没有拒绝规则匹配在 中deny,allow,请求是允许的(因为没有任何东西可以阻止它)。但从概念上讲,您可以考虑运行两组规则。)

我想可以给每个规则一个优先级参数或其他东西,并让管理员决定给所有东西的优先级。不过,坦率地说,当您只想知道是允许还是拒绝某事时,那么麻烦就不值得了。由于通过给“允许”或“拒绝”规则一个根据处理顺序覆盖另一个规则的机会,这很容易完成,这就是他们所做的。但是不同的站点可能要求其他规则集优先,因此他们将其设置为可配置的。

于 2013-03-19T18:43:26.147 回答