web-dev-qa-db-ja.com

AutoValidateAntiForgeryTokenとValidateAntiForgeryToken

私は今、偽造防止トークンを提供することにより、ポストスクリプトに対してポストメソッドを保護しようとしていましたが、.Net CoreにはAutoAntiForgeryTokenという名前の別の属性があることに気付きました。 XMLコメントとオンライン検索では、この新しい属性に関する情報はあまり提供されませんでした。

新しい属性が何であるかについてのヘルプと説明は、大歓迎です。

18
Arrrr

AutoValidateAntiforgeryTokenAttributeから ドキュメント

すべての安全でないHTTPメソッドの偽造防止トークンの検証を引き起こす属性。 GET、HEAD、OPTIONS、およびTRACE以外のHTTPメソッドには、偽造防止トークンが必要です。これは、アプリケーションのデフォルトで偽造防止トークンの検証をトリガーするグローバルフィルターとして適用できます。

AutoValidateAntiforgeryTokenAttributeを使用すると、偽造防止トークン検証をすべての安全でないメソッドにグローバルに適用できます。 POST, PUT, PATCH and DELETE。したがって、[ValidateAntiForgeryToken]属性を、それを必要とするすべてのアクションに追加する必要はありません。

これを使用するには、次のコードをConfigureServicesクラスのStartupメソッドに追加します

services.AddMvc(options =>
{
    options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
});

偽造防止検証を無視する必要がある場合は、[IgnoreAntiforgeryToken]属性をアクションに追加できます。

27

場合によっては、コントローラ全体で複数のリクエストをマークする必要がある一方で、さまざまなGETベースのアクションなど、偽造防止を必要としない一部のリクエストを要求することがあります。プロセスがユーザーにとってより便利で快適になるのに役立つツールがいくつかあります。 1つ目はAutoValidateAntiforgeryToken属性です。 ValidateAntiForgeryToken属性と同様に動作します。ただし、GET、HEAD、OPTIONS、およびTRACEメソッドで呼び出されるアクションは自動的に無視されます。これらは、データの取得用に設計されています。これにより、データを取得するメソッドに影響を与えることなく、データを変更できるすべてのメソッドに偽造防止をすばやく簡単に追加できます。

次のコードは、AutoValidateAntiforgeryToken属性の例です。

[AutoValidateAntiforgeryToken]
public class AntiForgeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public IActionResult Index(string userName)
    {
        return View("Index", userName);
    }
    [HttpDelete]
    public IActionResult RemoveUser(string userName)
    {
        string url = string.Format("~/RemovedUser/{0}", userName);
        return RedirectToAction("Account", "RemoveUser", "User");
    }
}

この例では、通常のインデックスアクション(GET)はOriginに関係なく機能しますが、POSTメソッドを使用したインデックスアクションと、DELETEメソッドであるRemoveUserアクションはどちらもクライアントに偽造防止トークンを利用する。

0