0

「Order deny,allow」と「Order allow,deny」の基本的な違いは、前者は許容的 (「Allow」ディレクティブが優先され、デフォルトで誰でも許可される) であり、後者は禁止的 (「Deny」ディレクティブが優先され、デフォルトでは誰も許可されません)。

私が正しく理解していると仮定すると、これは非常に直感的ではなく、なぜ Order ディレクティブがこのように機能するのか疑問に思っています。根本的な根拠は何ですか?たとえば、これはアクセス制御を表現するための良い方法の誰かのアイデアですか? リクエストを異なる順序で処理することは計算上有利ですか? これは拡張性のためですか?

4

1 に答える 1

1

重要なアクセス制御を行っている場合、2つのルールが同じ要求に一致する場合があります。それらが競合する場合(つまり、一方が「拒否」と言い、もう一方が「許可」と言う)、どちらを優先するかを決定する何らかの方法が必要です。または、ルールが一致しない場合があり、それらのケースをカバーするためにデフォルトのポリシーが必要です。

Apacheでは、これはと呼ばれOrder、そのように機能します。これは主に、Apacheがアクセス制御を処理することを決定したためです。それらを処理する方法では、ルールは「許可」ルールと「拒否」ルールに分けられます。リクエストが届くと、概念的には次のように処理が行われます。

  1. Apacheは、順序がの場合は最初に拒否ルールを実行し、順序がのdeny,allow場合は最初に許可ルールを実行しallow,denyます。
  2. Apacheは他のルールを実行します。
  3. 最後の試合が勝ちます。一致するものがない場合、の最後のアクションOrderはポリシーです。

(このプロセスには明らかにいくつかの最適化があります。おそらく、allow,denyで、許可ルールが一致しない場合、Apacheは拒否ルールを気にせず、とにかく要求をすでに拒否しているためです。同様に、拒否ルールが一致しない場合ではdeny,allow、要求は許可されます(停止するものが残っていないため)。ただし、概念的には、両方のルールセットを実行することを検討できます。)

各ルールに優先度パラメータなどを付けて、管理者にすべてに与える優先度を決定させることは可能だと思います。率直に言って、しかし、あなたがしたいのは何かを許可するか拒否するかを知ることだけであるとき、それはそのすべてのトラブルの価値はありません。これは、「許可」ルールまたは「拒否」ルールのいずれかを処理順序に基づいて他方をオーバーライドする機会を与えることで簡単に達成できるため、彼らはそれを実行しました。ただし、サイトが異なれば、他のルールセットを優先する必要がある場合もあるため、サイトを構成可能にしました。

于 2013-03-19T18:43:26.147 に答える