2011-01-04 9 views
11

Authorize属性でコントローラを装飾してアクセスを制御することができますが、わからないことはすべてのコントローラ/ビューのセキュリティを強制するための受け入れられた、または適切な方法です地域。asp.net mvcのエリアレベルのセキュリティ

認証セキュリティを適用するために、web.config、エリア登録、または他の場所に何かがありますか?

答えて

9

を使用することができますあなたが心配している地域)はAuthorizeBaseControllerに下ります。

public class HomeController : AuthorizeBaseController 
{ 
    public ActionResult Index() 
    { 
    return View(); 
    } 
} 

[Authorize]属性が新しい基本クラスのすべての子孫に影響を与える必要があります。

編集私は<location path="" >アプローチを使用して持っている問題は、ルーティングエンジンが行うため、どのルートがURLに基​​づいて(したがって、特定のルート)の権限を設定し、任意のコントローラを呼び出すすることが代わりに可能だ、ということですコントローラの動作により、保護すべきコントローラを呼び出すことができ、認可をスキップすることができる。これはページがページであったため(メソッド呼び出しではないため)、Webフォームの問題ではありませんでしたが、MVCのページとパスとコードの分離は、これを巨大なセキュリティホールにしています。

+3

あなたのメソッドはMVC2の古いメソッドとして提案されています。あなたが間違っているとはまったく示唆していません。グローバルフィルタを使用したMVC3の新しく改良されたテクニックへのリンクhttp://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net-mvc-3-application .aspx –

+0

@Dougそれは滑らかです。ありがとう! –

+0

私は火曜日にMVC3を学ぼうとしていたので、あなたの歓迎です。 :) –

-3

あなたは常に便利な方法が

[Authorize] 
public abstract class AuthorizeBaseController : Controller 
{ 
} 

新しい基本クラスを作成し、あなたがあなたのケースでは、認可(、のすべてを必要とし、あなたのコントローラのすべてれることを確認することです <location path="" > <system.web> <authorization> deny or allow </authorization> </system.web> </location>

+1

MVCアプリケーションをセキュリティで保護するためにweb.configメソッドを使用しないでください。http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4- app-and-the-new-allowanonymous-attribute.aspx –

+1

あなたがこれを行うべきではないことを明示的に述べている他の回答と、なぜこれをしてはならないのかという理由で、投票を停止してください。 – JTech

0

すでに提案したように、web.configに<location />要素を使用することができます。それ以外の場合は、領域ごとにベースコントローラクラスを使用し、AuthorizeAttributeでそれを修飾して、それを継承するすべてのコントローラもフィルタ処理できるようにすることができます。

7

MVCアプリケーションでこれを行う安全な方法は、ベースコントローラーを帰属させ、そのサブコントローラーのサブクラスにすべてのコントローラーを持つことです。

<ロケーション>タグをMVC承認のために使用アプリケーションのセキュリティホールを開放します。 URLやルートを確保することには関心がありません。コントローラー自体は、保護しようとしている実際のリソースであるため、保護する必要があります。したがって、保護装置をコントローラに直接配置する必要があります。

さらに、エリアはコントローラーではなく、ルートをグループ化するファンシーな方法であることに注意してください。ファンシーロジックを使用して現在の領域を検出し、許可設定を推測しようとすると、アプリケーションのセキュリティホールが開かれます。

関連する問題