2015-06-20 16 views
15

Có phải @Html.AntiForgeryToken() vẫn được yêu cầu trong ASP.NET .NET4.6 vNext không?Html.AntiForgeryToken() vẫn được yêu cầu?

Các đồ trang trí hình thức đã thay đổi để

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

Từ này

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

Và không còn bao gồm này

@Html.AntiForgeryToken() 

Các Hoạt động điều khiển vẫn được đánh dấu bằng các thuộc tính ValidateAntiForgeryToken như mong đợi mặc dù vậy chính xác nó đến từ đâu? Tự động?

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

Trả lời

32

Trình trợ giúp thẻ biểu mẫu sẽ tự động thêm mã thông báo chống giả mạo. (Trừ khi bạn sử dụng nó làm phần tử biểu mẫu html chuẩn, hãy thêm thuộc tính action theo cách thủ công). Kiểm tra mã nguồn của form tag helper, bạn sẽ thấy phần sau ở cuối phương thức Process.

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

Nếu bạn đánh dấu vào html của trang đăng nhập, bạn sẽ thấy những đầu vào ẩn sau bên trong các hình thức:

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

Bạn cũng có thể tự cho phép/vô hiệu hóa nó thêm thuộc tính asp-antiforgery:

<form asp-controller="Account" asp-action="Register" asp-antiforgery="false" method="post" class="form-horizontal" role="form"> 
+4

Kể từ MVC 6, Asp.net 5 RC1 Trình trợ giúp thẻ là "asp-antiforgery" không phải "asp-anti-forgery" không chắc chắn nếu nó đã như thế hoặc đã thay đổi.
'

' –

Các vấn đề liên quan