2012-07-03 44 views
8

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?

Trả lời

5

Mã thông báo XSRF chống hoạt động bằng cách mã hóa cùng một giá trị ngẫu nhiên vào cookie phiên và vào biểu mẫu của bạn. Cookie phiên chỉ được gửi khi bạn tạo bài đăng từ biểu mẫu mà bạn đã tạo.

Cách tiếp cận này cũng hoạt động, ví dụ: trên các máy chủ trang trại (trong một kịch bản cân bằng tải), nơi tất cả các máy chủ chia sẻ khóa mã hóa. Việc xác thực chỉ hoạt động bằng cách so sánh giá trị được giải mã từ dữ liệu biểu mẫu đã đăng và giá trị được giải mã từ cookie phiên được đăng. Phương thức này được gọi là phương thức double submitted cookie.

Vì vậy, nó khá bình thường khi mỗi yêu cầu nhận được một giá trị khác nhau. This is a nice post về mã thông báo ASP.NET MVC XSRF.

+0

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. –

+0

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

+0

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? –

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