@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)
フォームタグヘルパーは、偽造防止トークンを自動的に追加します。 (標準の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">