2012-01-21 12 views
2

簡単な質問;コントローラへのASP.NET MVCコールのセキュリティ

コントローラのユーザとと関数getを呼び出すことができます。

mydomain.com/user/getとそこにある機能にアクセスしてください。

私のアプリケーションだけがそれを呼び出せるようにするベストプラクティスは何ですか? [ChildActionOnly]属性でアクションメソッドを飾る

おかげ

+0

あなたのアプリケーションは何ですか? – epignosisx

答えて

3

は、コントローラのアクションメソッドは、直接URLを入力するユーザーが起動することができないことを保証します。 EG

[ChildActionOnly] 
     public ActionResult _CantNavigateHere() 
     { 
      return View(); 
     } 
+0

こんにちは柔道、それはコントローラからの呼び出しが行われた場合に機能します。私は$ .ajaxを使用してjQueryからいくつかのコントローラfuncitonalityを呼び出します。コントローラのアクションが提案されたように装飾されている場合、私は500エラーを返します。どうすればjqueryからこのアクションを呼び出すことができますか? – IGIT

+0

ajaxのシナリオでは、[AjaxOnly]属性を実装する必要があります。http://helios.ca/2009/05/27/aspnet-mvc-action-filter-ajax-only-attribute/の簡単なデモがあります。 – Judo

+0

しかしこれは誰でもajaxを使って呼び出すことができるということですか? – IGIT

0

MVC3とAjaxでAntiForgeryTokenを使用できます。

これは私がそれを行う方法です。

@Html.AntiForgeryToken() 

そして、あなたのAjax呼び出しのようにポスト変数にこの値が含まれます:

、どこでも、あなたのビューに出力(これはもちろん、確実なものではなく、別のセキュリティレイヤを追加します)

$.post("/Controller/Action/", 
       { 'id': var_id, '__RequestVerificationToken': $("input[name='__RequestVerificationToken']").val() }, 
       function (data) { /* handle request */ }); 

そして、あなたのコントローラーで:この他に

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Action(int id) {..} 

、あなたものチェックを行うことができますあなたのドメインと一致しないホストを拒否します。これはなりすましにすることもできますが、もう1つのレイヤーに追加するだけです。

関連する問題