Có, đây là tất cả những gì bạn cần làm.
Chừng nào bạn tạo ra một thẻ mới trên mỗi trang được bảo vệ, với <%= Html.AntiForgeryToken() %>
và luôn đảm bảo nó sẽ được kiểm tra trong bất kỳ hành động bảo vệ, sử dụng [ValidateAntiForgeryToken]
này thực hiện các mẫu Synchronizer Mã như đã thảo luận tại CSRF Prevention Cheat Sheet tại OWASP .
Để kịch bản thành công trong việc đưa ra yêu cầu có thể chấp nhận được, trước tiên nó sẽ nhận biểu mẫu và đọc mã thông báo và sau đó đăng mã thông báo. Same Origin Policy sẽ ngăn không cho phép điều này trong trình duyệt. Một site canot thực hiện yêu cầu http kiểu AJAX đến một trang khác; chỉ với chính nó. Nếu vì một lý do nào đó, chính sách gốc có thể bị vi phạm, thì bạn sẽ trở nên dễ bị tổn thương. Lưu ý rằng nếu bạn có lỗ hổng tập lệnh cross-site, kẻ tấn công có thể lạm dụng lỗ hổng xss để tránh sự bảo vệ được cung cấp bởi cùng chính sách gốc (vì tập lệnh hiện đang chạy từ trang web của bạn, do đó SOP thành công) . Sau đó, tập lệnh được tiêm có thể đọc và gửi lại mã thông báo một cách vui vẻ. Kỹ thuật này để vượt qua bảo vệ CSRF thông qua XSS đã được phổ biến trong một số sâu gần đây. Về cơ bản, nếu bạn có XSS, bảo vệ CSRF của bạn là một sự lãng phí thời gian, vì vậy hãy đảm bảo bạn cũng không dễ bị tổn thương.
Một điều cần lưu ý khác là Flash và Silverlight. Cả hai công nghệ này không đăng ký chính sách gốc giống nhau và thay vào đó sử dụng các tệp chính sách tên miền chéo để hạn chế quyền truy cập vào tài nguyên từ xa. Tập lệnh Flash/Silverlight chỉ có thể truy cập tài nguyên trên trang web của bạn nếu bạn xuất bản tệp xml chính sách tên miền chéo trên trang web của riêng mình. Nếu bạn xuất bản tệp này, chỉ bao giờ cho phép danh sách trắng các máy chủ của bên thứ ba đáng tin cậy và không bao giờ cho phép *.
Đọc thêm về CSRF at OWASP Xem thêm: XSS Prevention Cheat Sheet
Vì vậy, ngoài việc xác thực mã thông báo, bạn phải cẩn thận với crossdomain.xml, phải không? Nếu tôi hiểu đúng, việc hiển thị ứng dụng web cho các yêu cầu miền chéo không bị hạn chế (cho phép-http-request-headers-from domain = "*" trong crossdomain.xml) đánh bại mục đích của AntiForgeryTokens và làm cho trang web CSRF dễ bị tấn công? – PanJanek
có. điểm tốt nếu bạn xuất bản tệp chính sách crossdomain.xml trên máy chủ của mình, bạn có thể mở lại cho mình các cuộc tấn công CSRF được thực hiện thông qua ActionScript trong một bộ phim flash từ xa. Nếu bạn xuất bản tệp này chỉ bao giờ được các bên thứ ba tin cậy vào danh sách trắng và không bao giờ *. Tôi sẽ thêm câu trả lời này vào câu trả lời – Cheekysoft
"Một trang web có thể gửi yêu cầu http kiểu AJAX đến một trang web khác, chỉ với chính nó" Cách phân tích google hoạt động sau đó? Tôi cho rằng Same-Origin-Policy có liên quan đến việc không thể đọc/sửa đổi cookie của một trang web khác. –