web-dev-qa-db-ja.com

ASP.NET MVCでパスをロックダウンする方法は?

私は初めてMVC4で遊んで、MVC3と比較して何が変更/追加されたかなどを確認しています。

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

MVC 4で異なることに最初に気付いたのは、次の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で何をする必要がありますか?

14
Jed

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

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

引用

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

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

例:

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

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

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

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

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

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

23
Erik Philips