Chúng tôi có trang web sử dụng MVC3 và phương thức xác thực tùy chỉnh không dựa vào xác thực biểu mẫu - ít nhất là từ những gì tôi có thể biết. Trong web.config, chúng tôi đặtAntiForgeryToken không có xác thực biểu mẫu
<authentication mode="None"></authentication>
và chúng tôi không bao giờ sử dụng/đặt HttpContext.User ở bất kỳ đâu trong mã. Vấn đề là khi sử dụng @ Html.AntiForgeryToken() trong một số trường hợp người dùng được thông báo lỗi này:
A required anti-forgery token was not supplied or was invalid
Chúng tôi tập trung tất cả kiểm tra chống giả mạo trong OnAuthorization với mã này:
if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0)
{
var forgery = new ValidateAntiForgeryTokenAttribute();
forgery.OnAuthorization(filterContext);
}
Đó là nơi ngoại lệ xảy ra. Chúng tôi có defined a machineKey in web.config để ngăn các khóa mới được tạo khi nhóm ứng dụng tái chế. Điều này không khắc phục được vấn đề.
Tiếp theo, chúng tôi nghĩ rằng có thể trình duyệt của khách hàng không gửi cookie. Chúng tôi đã bắt đầu ghi nhật ký cookie và nhận thấy rằng trong một số trường hợp, cookie RequestVerificationToken_Lw được gửi, nhưng trong một số trường hợp khác không phải là - mặc dù các cookie khác, như cookie được Google Analytics tạo, được gửi cùng tốt. Nó có thể là một cái gì đó trong trình duyệt là tước một số cookie và để lại những người khác trong?
Có vẻ như là anti-forgery token depends on forms authentication. Đây có phải là trường hợp không? Bất kỳ cách nào để tiếp tục sử dụng AntiForgeryToken khi không sử dụng xác thực biểu mẫu một cách đáng tin cậy. Hãy nhớ rằng phương pháp tôi mô tả ở trên hoạt động trong hơn 90% trường hợp, nhưng chúng tôi không thể xác định lý do tại sao phương thức này không hoạt động đối với một số người.
Suy nghĩ?
Cảm ơn!
Tại sao phải quan tâm đến mã thông báo chống giả mạo nếu bạn không sử dụng bất kỳ xác thực nào? Mục đích của cuộc tấn công CSRF là để kẻ tấn công thực hiện các hành động thay mặt cho một số người dùng được xác thực trên một trang web. Và nếu một trang web không sử dụng CSRF xác thực có vẻ không có mục đích. –
Tôi đang sử dụng xác thực, không phải là hình thức xác thực. – pbz
bạn đang sử dụng loại xác thực nào? –