私は初めて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で何をする必要がありますか?
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セキュリティを受け入れるべきではないと思います。初めて正しく実行し、怠惰にならず、特定のテクノロジーで使用するように設計されていないものを使用してください。