2016-05-27 23 views
4

私は最近、すべてのPOSTリクエストで偽造防止トークンをチェックするために取り組んでいるサイトを更新しました。私は反偽造トークンをチェックするためにプレフィルターを入れているAJAXリクエストの場合とヘッダに追加CORSプリフライトでPOSTを行うAjax anti-forgery OPTIONSリクエスト(302リダイレクト)

$.ajaxPrefilter(function (options, localOptions, jqXHR) { 
    if (options.type == "POST") { 
     var token = GetAntiForgeryToken(); 
     jqXHR.setRequestHeader(token.name, token.value); 
    } 
}); 

別々にデータを送信するためにCORSを使用して管理者としてログインしたときに、サイトも管理ツールを持っています管理サイト。これらのツールの1つは、AJAX投稿要求です。ヘッダーが要求に追加され、正しく動作します。

もう1つのツールは、ダイアログに表示されるフォームを返すGETリクエストです。これは正常に動作します。しかし、フォームが提出されると、プリフライトOPTIONS要求は302で満たされ、「プリフライトの応答は無効です(リダイレクト)」というエラーが発生します。

ajaxPrefilterを削除すると、投稿リクエストはしません。プレフィルタをオンにすると、ストレートポストリクエストは機能しますが、フォームポストは機能しません。私はかなり失われています。偽装防止ヘッダーは、Access-Control-Allow-Headersで許可されています。両方の要求は、次のとおりです。この1つは302

OPTIONS http://localhost:64789/Example2/Example2/ HTTP/1.1 
Host: localhost:64789 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: http://localhost:64947 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type 
Accept: */* 
Referer: http://localhost:64947/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 

を返し

OPTIONS http://localhost:64789/Example/Example/?_=1464356730712 HTTP/1.1 
Host: localhost:64789 
Connection: keep-alive 
Access-Control-Request-Method: POST 
Origin: http://localhost:64947 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type 
Accept: */* 
Referer: http://localhost:64947/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 

この1つは任意の助けが本当に有用であろう200

を返します。

+0

あなたの質問は簡単ではありません。一般的で有用な部品のみを提供してください... – ReZa

答えて

0

これは、フォームのgetメソッドに[HttpGet]属性を追加して修正しました。

0

フォームポストのコンテンツタイプヘッダーを送信するのを忘れたと思います。この回答からいくつかのコンテンツタイプを追加してみてください:https://stackoverflow.com/a/35452170/1727132