16

MVC 3と比較して何が変更/追加/などされたかを確認するために、初めてMVC 4をいじっています。

まず、空の MVC 4 Web アプリケーションを作成し、ゼロから構築を開始しました。

MVC 4 との違いに最初に気付いた点の 1 つは、次の web.config 設定が Web ページのアクセシビリティに影響を与えないという事実です。

<configuration>
    <location path="">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
    </location>
    .....
</configuration>

MVC 3 に戻ると、上記の承認設定では、すべての匿名ユーザーがサイト内のコンテンツにアクセスすることを拒否していました。ただし、同じ設定を MVC4 Web.config ファイルに追加すると、匿名のユーザーが選択した URL を自由に制御できます。

MVC 3 で行ったようにすべてのパスをロックダウンするには、MVC 4 で何をする必要がありますか?

4

1 に答える 1

25

ASP.NET MVC 4 アプリのセキュリティ保護と新しい AllowAnonymous 属性をご覧ください。

MVC アプリケーション (任意のバージョン) を保護するためにルーティングまたは web.config ファイルを使用することはできません。MVC アプリケーションを保護するためにサポートされている唯一の方法は、Authorize 属性を適用することです...

見積もり

MVC はルートを使用し、URL を Web フォーム、PHP、および従来の Web サーバーなどの物理的なファイルの場所にマップしません。したがって、web.config を使用すると、サイトに確実にセキュリティ ホールが開きます。

これが将来変更される場合は、製品チームから連絡がありますが、今のところ例外なくルールです。

例:

デフォルトの ASP.Net MVC プロジェクト (インターネット/イントラネット) から始めます。

以下を追加して web.config を編集します。

<location path="Home">
  <system.web>
    <authorization>
      <deny users="*">
    </authorization>
  </system.web>
</location>

プロジェクトを実行します。デフォルトではデフォルトルートが使用され、/Home/Indexコンテンツが表示されます。デフォルト テンプレートを変更せずに web.config をバイパスするだけです。なんで?ASP.Net パイプラインは、要求された URL を web.config で指定された場所と比較しているためです。ただし、承認イベントがパイプラインで実行された、ルーティングが行われ (デフォルト ルーティングまたはカスタム ルーティング)、制限されていると思われる領域へのアクセスが許可されます。

さらに、すべての MVCRedirect()は、承認パイプライン イベントの後にルーティングが行われるため、同じセキュリティ対策もバイパスします。

だれも、ちょっとしたセキュリティを受け入れるべきではないと思います。最初は正しく行い、怠惰にならず、特定のテクノロジーで使用するように設計されていないものを使用してください。

于 2012-08-01T18:20:01.103 に答える