web-dev-qa-db-ja.com

Html.AntiForgeryToken()はまだ必要ですか?

@Html.AntiForgeryToken()はASP.NET .NET4.6 vNextでも引き続き必要ですか?

フォームの装飾が次のように変更されました

<form asp-controller="Account" 
      asp-action="Login" 
      asp-route-returnurl="@ViewBag.ReturnUrl" 
      method="post" 
      class="form-horizontal" 
      role="form">

これから

@using (Html.BeginForm("Login", 
                       "Account", 
                       new { ReturnUrl = ViewBag.ReturnUrl }, 
                       FormMethod.Post, 
                       new { @class = "", role = "form" }))

これはもう含まれません

@Html.AntiForgeryToken()

コントローラーアクションは、期待どおりValidateAntiForgeryToken属性でマークされていますが、正確にどこから来ているのでしょうか?自動的に?

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
22
matt.

フォームタグヘルパーは、偽造防止トークンを自動的に追加します。 (標準のhtmlフォーム要素として使用しない限り、手動でaction属性を追加します)。 フォームタグヘルパー のソースコードを確認すると、Processメソッドの最後に次のように表示されます。

if (Antiforgery ?? antiforgeryDefault)
{
    var antiforgeryTag = Generator.GenerateAntiforgery(ViewContext);
    if (antiforgeryTag != null)
    {
        output.PostContent.AppendHtml(antiforgeryTag);
    }
}

ログインページのhtmlを確認すると、フォーム内に次の非表示の入力が表示されます。

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8BIeHClDdT9...">

asp-antiforgery属性を追加して、手動で有効/無効にすることもできます。

<form asp-controller="Account" asp-action="Register" asp-antiforgery="false" method="post" class="form-horizontal" role="form">
42
Daniel J.G.