2017-02-08 4 views
0

CSRF攻撃を避ける必要があるサイトがあります。私は多くの時間を研究していると、このようなAJAX呼び出した後、すべての例では、このサーバー側でAjaxとWeb Apiを使用してWebフォームでCSRFを防止する

@functions{ 
    public string TokenHeaderValue() 
    { 
     string cookieToken, formToken; 
     AntiForgery.GetTokens(null, out cookieToken, out formToken); 
     return cookieToken + ":" + formToken;     
    } 
} 

のようにクライアント側で機能を使用します。

$.ajax("api/values", { 
    type: "post", 
    contentType: "application/json", 
    data: { }, // JSON data goes here 
    dataType: "json", 
    headers: { 
     'RequestVerificationToken': '@TokenHeaderValue()' 
    } 
}); 

明らかに最初のコードは、MVCかみそりの呼び出しで、私の場合は使用できません。 ASP.NET MVCを使用せずにこの偽造トークンをjavascript/jqueryで入手する方法はありますか?

答えて

0

私は簡単な解決策が見つかりました:このようなプロパティを作成し、C#の側で

<input type="hidden" id="hdnAntiForgeryTokens" runat="server" value=""/> 

:このような隠しフィールドを入れて、ASPXまたはASCXファイルで

protected string AntiForgeryTokens 
    { 
     get 
     { 
      string cookieToken, formToken; 
      AntiForgery.GetTokens(null, out cookieToken, out formToken); 
      return cookieToken + ":" + formToken; 
     } 
    } 

Page_Loadイベントで値を割り当てます。

hdnAntiForgeryTokens.Value = AntiForgeryTokens; 
その後

、jqueryのを使用して値を読む:

$.ajax({ 
     type: "POST", 
     url: //your web api url, 
     data: getJason(), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     headers: { 
      'RequestVerificationToken': $('#hdnAntiForgeryTokens').val() 
     }, 
     statusCode: { 
      200: function _() { 
       //success handling 
      }, 
      500: function(){ 
       //error handling 
      } 
     } 
    }); 

私はそれがこの問題を持っている他の誰かに役立ちます願っています。

関連する問題