2016-06-17 24 views
0

これは愚かな質問かもしれませんが、私はこれについてしばらく考えていました。たぶん私はこのすべての仕組みや、もちろんこのシナリオをテストしていない方法についていくつかの詳細を忘れているかもしれません。もちろんajax呼び出しのMVCのAntiForgeryTokenとIsAjaxRequest()メソッド

[HttpPost] 
[ValidateAntiForgeryToken] 
public JsonResult greetingMsg(string name, string timeOfDay) 
{ 
    if (!Request.IsAjaxRequest()) return null; 
    return Json(new { result = $"Hello {name}, good {timeOfDay}" }); 
} 

、我々はAjaxの呼び出しでAntiForgeryTokenを送信する必要があります、またはこのメソッドが実行されません。

はこのように、ASP.NET MVCプロジェクトにシンプル化するJsonResultアクションの例を想像してみてください。

このJsonResultメソッドは、Webのどこからでも呼び出すことができますが、AntiForgeryTokenが一致しないために失敗します。 [ValidateAntiForgeryToken]属性を取り除くと、Ajaxを使ってWeb上の別のサイトから呼び出されたときにメソッドが実行されるのですか、Ajax呼び出しは同じWeb内で呼び出されたときだけ成功するのでしょうか?

ありがとうございました。

答えて

0

AntiForgeryTokenを削除すると、どこからでも動作します。送信元を確認するハンドラまたはその他のセキュリティメカニズムを委任してアプリケーションを制限する場合を除きます。しかし、あなたはそれを偽装することもできます。

私はAntiForgeryTokenを求めていましたが、純粋なjavascript SPAを構築していたので、ASP.NET MVC(サーバー上のWeb APIと別のSPA)を構築していました。安全に動作させる唯一の方法は、OAuth2 JWTを導入することでした。 (発行者がJsonWebTokenのトークンの内部で署名されているため、あなたはそれを偽造することはできません)あなたのAPIを呼びたい人は誰でもトークンを取得できなければなりません。

関連する問題