听起来“Order deny,allow”和“Order allow,deny”之间的基本区别在于前者是宽容的(“允许”指令是优先的,任何人都是默认允许的)而后者是禁止的( “拒绝”指令具有优先级,默认情况下不允许任何人使用。
假设我理解正确,这是非常不直观的,我想知道为什么Order指令以这种方式工作。基本原理是什么?例如,这个人是否有表达访问控制的好方法?以不同的顺序处理请求在计算上是否有利?这是为了扩展性吗?
答案 0 :(得分:1)
如果您正在进行非平凡的访问控制,则有时会有两个规则匹配同一个请求。当它们发生冲突时(即:一个说“拒绝”而另一个说“允许”),你需要一些方法来决定哪一个优先。或者,会出现没有规则匹配的情况,您需要一个默认策略来覆盖这些情况。
在Apache中,它被称为Order
,其工作方式与此类似,主要是因为Apache决定如何处理访问控制。它处理它们的方式,规则被分解为“允许”规则和“拒绝”规则。当请求进入时,处理概念就像这样:
deny,allow
,Apache首先运行拒绝规则,如果订单为allow,deny
,则首先运行允许规则。 Order
中的最后一项操作是政策。(显然对此过程进行了一些优化。据说在allow,deny
中,如果Allow规则不匹配,Apache甚至不会理会拒绝规则,因为它已经拒绝了请求。同样,如果在deny,allow
中没有匹配拒绝规则,则允许该请求(因为没有任何东西可以阻止它)。但从概念上讲,您可以考虑运行这两组规则。)
我认为可以给每个规则一个优先级参数或者某个东西,并让管理员决定给予一切的优先级。坦率地说,当你想要做的就是知道是允许还是否认某些东西时,不值得所有麻烦。由于通过给予“允许”或“拒绝”规则有机会根据处理顺序覆盖另一个规则,这很容易实现,这就是他们所做的。但是不同的站点可能需要优先考虑另一组规则,因此它们使其可配置。