2

私はマイクロソフトの試験のために勉強していて、いくつかのサンプル問題を解いています。この質問があります:

「メンバーシップとロール プロバイダーを使用するように構成された ASP.NET Web アプリケーションを開発しています。

すべてのユーザーが HTTP GET を実行できるようにする必要がありますが、モデレーターという名前のユーザーのみが POST 操作を実行できるようにする必要があります。どの構成を web.config ファイルに追加する必要がありますか?"

<authorization>
  <deny verbs="POST" users="*" />
  <allow verbs="POST" users="Moderator" />
  <allow verbs="GET" users="*" />
</authorization>

<authorization>
  <allow verbs="GET" users="*" />
  <allow verbs="POST" users="Moderator" />
  <deny verbs="POST" users="*" />
</authorization>

他に2つの答えがありましたが、明らかに間違っていたので、ここでは複製しませんでした.

2 つのルール セットの唯一の違いは、ルールが配置される順序です。

正解は 2 番目の規則セットです。ここで、ルールは最初に「モデレーター」の POST アクセスを許可し、次にそれ以外のすべてのユーザーに対してそれを削除します。これは私には直感に反しているように思えます.1人に特権を与えてから、その特権を全員から削除しても、1人はその後も特権を持っています.

どちらかといえば、最初の一連のルールの方が理にかなっています。最初に全員を拒否し、次に選択的に個人にアクセスを許可します。どうやらこれは間違っているようです!

これをよりよく理解できるように、なぜこれが当てはまるのかを誰か説明できますか?

4

2 に答える 2

4

これはあくまでも先着順のケースです。ASP.NET は、一致するルールにヒットするまで順番にルールを処理します。したがって、最初のシナリオでは、に到達するdenyにルールにヒットします。POST allow

どちらかといえば、最初の一連のルールの方が理にかなっています。最初に全員を拒否し、次に選択的に個人にアクセスを許可します。

それはそれがどのように機能するかではありません。ルールはrequest ごとにチェックされるため、最初のルールが基本的に言っていることは次のとおりです。

  1. POST全員からのすべての要求を拒否します。
  2. POSTモデレーターのリクエストを許可します。
  3. GET全員のリクエストを許可します。

すべてその順序で。ここでの問題は、モデレーターがリクエストを送信したときに、最初のルール (全員POST向けであるため) に一致し、拒否されることです。ただし、2 番目のシナリオは次のように言っています。

  1. GET全員のリクエストを許可します。
  2. POSTモデレーターのリクエストを許可します。
  3. POST全員のリクエストを拒否します。

そのため、モデレーターがPostリクエストを送信すると、2 番目のルールに一致し、リクエストの続行が許可されます。他の誰かがPOSTリクエストを送信すると、3 番目のルールに該当し、拒否されます。

于 2012-08-31T08:57:38.460 に答える
1

ルールは順番に評価され、現在の「属性のセット」 (= 要求タイプ、ユーザーが認証されているかどうか、ユーザーの役割など) に一致する最初のルールが使用されます。MSDNから:

アプリケーションのマージされた一連のルールを指定すると、ASP.NET はリストの先頭から開始し、最初の一致が見つかるまでルールをチェックします。ASP.NET の既定の構成には、すべてのユーザーを承認する要素が含まれています。(デフォルトでは、このルールは最後に適用されます。) 一致する承認ルールが他にない場合、リクエストは許可されます。一致が見つかり、一致が拒否要素である場合、要求は 401 HTTP ステータス コードと共に返されます。allow 要素が一致する場合、モジュールはリクエストをさらに処理することを許可します。

于 2012-08-31T09:10:23.440 に答える