Tôi đang sử dụng phương thức trợ giúp AntiForgeryToken
. Từ những gì tôi hiểu về AntiForgeryToken là nó là phiên cơ sở, để mỗi người dùng có cùng một mã thông báo nhưng một người dùng khác sẽ có một mã thông báo khác (miễn là bạn sử dụng cùng một muối cho tất cả các biểu mẫu). "Vấn đề" của tôi là AntiForgeryToken
đang tạo các mã thông báo khác nhau cho cùng một người dùng có cùng một muối. Ví dụ ...AntiForgeryToken thay đổi theo yêu cầu
Contoller
public ActionResult Test()
{
return View();
}
Xem
@using (Html.BeginForm())
{
@Html.AntiForgeryToken("Salty!")
}
Output Yêu cầu # 1
<input name="__RequestVerificationToken" type="hidden" value="K1sijFuYvyGUJjGg33OnLjJaU3tFpGFDutRt9TOFSkZ6FcrhJMMQPnOqjIHuTwBXs/sPBXEiE+1qyV9l63nnSO161b+OtLbaBoPC7K3/7wxtnuSY+N0o/fqBgVoDyac4dNVp+OvanKBSrHINKfc3WEg9269BHOJNzFowC6Aeac/afAGTGrBypxUHfqrKVowD" />
Output Yêu cầu # 2
<input name="__RequestVerificationToken" type="hidden" value="mOpP6LMQXnCmjr5/Wdtnhguh3PyZxWj7GWf8LYzZXPKcJBBT+DbAHvynquSD65O0DBw1RKR7DxCNg372ukftCOWms+o75CraMyFMnvjGk7RU+znIQm05eRQvr5H6d/MDyn+0DWm3jLnMBM9GplsgMRqbdAHzSe69/cS2x9A4X/9jFTZQHUWXXHUr0xewF8Rk" />
Các phím khác nhau cho cùng một phiên với muối cùng. Tôi có một sự hiểu lầm cơ bản về bảo vệ CRSF không? Hay đây là một tính năng mới?
Vì vậy, nó thay đổi dữ liệu phiên trên máy chủ khi mã thông báo mới được phát hành? Tất cả các giá trị của cookie của tôi đều giữ nguyên. Tôi nghĩ rằng giá trị cookie __RequestVerificationToken_Lw__ sẽ thay đổi. –
Không, máy chủ đặt cookie trên máy khách. Sau đó, khách hàng sẽ gửi cùng một giá trị hai lần khi đăng. Sau khi được mã hóa trong dữ liệu biểu mẫu và một lần trong cookie (cookie được trasmited đến máy chủ trên POST). Máy chủ chỉ biết khóa mã hóa. Nó không lưu trữ bất cứ điều gì khác cho mục đích chống XSRF. – m0sa
Bất kỳ lý do gì không chỉ lưu trữ các mã trong phiên và không bao giờ gửi nó cho khách hàng? Một cái gì đó như: AntiForgery.GetTokens (null, ra cookieToken, ra formToken); trả về cookieToken + ":" + formToken; Sau đó, chỉ cần lưu trữ trong phiên? –