2013-04-24 35 views
16

Chúng tôi đang viết một ứng dụng dành cho thiết bị di động iOS trong mục tiêu-c tạo bài đăng lên ứng dụng máy chủ ASP.NET MVC của chúng tôi. Trên iPhone, ngăn xếp HTTP (và cookie, vv) dường như được chia sẻ với Safari. Điều này khiến chúng tôi mở các cuộc tấn công XSRF, vì vậy, trừ khi tôi nhầm, chúng tôi cần bảo vệ POST bằng mã thông báo chống giả mạo và bảo vệ các phương thức điều khiển của chúng tôi với ValidateAntiForgeryTokenAttribute.AntiForgery.GetTokens: mục đích của tham số oldCookieToken là gì?

Tôi sẽ hội đủ điều kiện cho câu hỏi này bằng cách nói rằng tôi không hiểu chính xác cơ chế mà mã thông báo antiforgery được tạo ra và xác minh ... đặc biệt, thuật ngữ 'nonce' được sử dụng trong ngữ cảnh này hơi huyền bí.

Vì chúng tôi không phân phối HTML cho khách hàng, chúng tôi không thể sử dụng tiêu chuẩn @Html.AntiForgeryToken(), vì vậy thay vào đó, chúng tôi phải sử dụng AntiForgery.GetTokens để nhận và phân phối mã thông báo cho khách hàng của chúng tôi. Điều này có thông số đầu tiên bí ẩn: oldCookieToken. Tại thời điểm này, tôi chỉ cần đặt nó là null và mọi thứ dường như hoạt động tốt. Vì vậy, bất cứ ai có thể cho tôi biết ... việc sử dụng cung cấp mã thông báo cũ cho thuật toán tạo mã thông báo là gì? Nếu chỉ một mã thông báo duy nhất được phát hành cho ứng dụng iOS của chúng tôi và được sử dụng lại cho nhiều bài đăng, điều này có gây rắc rối không?

Trả lời

17

AntiForgery.GetTokens sẽ cố gắng sử dụng lại mã thông báo cookie cũ cho mục đích xác thực. Vì vậy, nếu bạn đã có một mã thông báo xác thực mà bạn muốn sử dụng lại, nó sẽ cố gắng sử dụng nó thay vì tạo một mã thông báo mới. Nếu mã thông báo cũ không hợp lệ, mã thông báo sẽ tạo mã mới và sử dụng mã thông báo thay thế.

Vì vậy, hãy đi qua null đến oldCookieToken là hợp lệ. Nó chỉ đơn giản là nói với GetTokens để luôn tạo ra một mã thông báo cookie mới.

+0

Vâng - Tôi thấy điều này hữu ích. Không chắc chắn lý do tại sao nó không được đánh dấu là câu trả lời. Cảm ơn mặc dù. –

+0

@PaulDeen: Bây giờ là :-) – spender

+3

Lưu ý: Nếu bạn vượt qua một oldCookieToken hợp lệ, newCookieToken sẽ luôn trống, không có giá trị như oldCookieToken. – Alex

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