csrf_meta_tag
chèn nội dung chữ ký số vào trang, hoạt động như xác minh rằng các yêu cầu đến máy chủ ứng dụng thực tế là từ người dùng đã đăng nhập chính xác. Điều này giúp ngăn chặn việc tạo tập lệnh cross-site (một tập lệnh trên một trang hoàn toàn không liên quan kích hoạt yêu cầu nói, GMail, trong khi bạn đăng nhập vào Gmail của mình trong một tab khác).
Tôi dự định làm rõ, bản thân số csrf_meta_tag
không ngăn trang không liên quan kích hoạt yêu cầu GMail của bạn (hoặc bất kỳ dịch vụ nào khác là mục tiêu của cuộc tấn công), nhưng "chữ ký số" trong csrf_meta_tag
là được sử dụng để xác minh tính hợp lệ của các yêu cầu đã nêu. Yêu cầu không hợp lệ (tức là từ các nỗ lực tạo tập lệnh chéo trang) sẽ không được xác thực và do đó bị hủy.
Nói cách khác, từ quan điểm của kẻ tấn công của xem:
Trước csrf_meta_tags
tồn tại (họ không loại trừ để Rails bằng bất kỳ phương tiện), cho phép cross-site tấn công kịch bản thành công một trang web độc hại để gửi dữ liệu vào một ứng dụng web theo cách khiến yêu cầu xuất hiện như thể nó đang được thực hiện thay mặt người dùng. Vì vậy, giả sử bạn là quản trị viên trên dịch vụ web và trong một tab trình duyệt, bạn đã đăng nhập vào bảng điều khiển quản trị cho dịch vụ đó. Nếu trang web độc hại mở trong tab khác nhắm mục tiêu dịch vụ của bạn để tấn công, trang web độc hại có thể chạy tập lệnh tạo yêu cầu quản trị, chẳng hạn như danh sách bán phá giá của người dùng khỏi cơ sở dữ liệu, đánh cắp dữ liệu nhạy cảm khác hoặc gây hại, gây hại hoặc hủy dữ liệu chứa trong dịch vụ, tất cả trong khi xuất hiện (từ quan điểm của máy chủ) là yêu cầu hợp lệ từ chính quản trị viên. csrf_meta_tag
là một cách để ký yêu cầu và giúp ngăn chặn những nỗ lực đó thành công.
Có giải thích chi tiết hơn available here.
Cũng sẽ là giáo dục để thực hiện "nguồn xem" trên một trong các trang do Rails tạo và bạn sẽ thấy thẻ CSRF trông như thế nào.
Hãy để tôi google đó cho bạn http://stackoverflow.com/questions/941594/understand-rails-authenticity-token –
@MikhailNikalyukin Cảm ơn (tôi suy nghĩ). Điều đó giải thích CSRF, mà tôi đã biết những điều cơ bản, nhưng nó không giải thích cách * các thẻ meta * (trái ngược với các trường biểu mẫu ẩn) có thể ngăn chặn nó. Bạn có biết câu trả lời cho điều đó không? – Nick