Tôi đã đọc về cách sử dụng mẫu mã thông báo đồng bộ hóa để ngăn chặn CSRF (CSRF có nghĩa là giả mạo yêu cầu Cross-site.) Và tôi không hiểu nó thực sự an toàn như thế nào.Cách sử dụng Mẫu mã đồng bộ hóa để ngăn CSRF an toàn như thế nào?
Hãy nói rằng tôi có một trang web giả mạo ngân hàng fakebank.com với hai url:
fakebank.com/withdrawForm.html
- một yêu cầu GET mà hiển thị dưới dạng tiềnfakebank.com/doWithdraw
rút - POST để url này để thực hiện rút
Sự hiểu biết của tôi về lỗ hổng bảo mật là maliciousSite.com
có thể giả mạo yêu cầu POST tới fakebank.com/doWithdraw
và nếu bạn hiện đang đăng nhập vào fakebank, POST sẽ thành công.
Giả sử chúng tôi triển khai Mẫu mã thông báo đồng bộ hóa sẽ nhúng mã bí mật vào fakebank.com/withdrawForm.html
. Không thể maliciousSite.com
chỉ giả mạo yêu cầu GET cho biểu mẫu đó, phân tích cú pháp kết quả html, nhận mã thông báo và sau đó tạo yêu cầu POST bằng mã thông báo đó?
Giả sử fakebank.com không kiểm tra HTTP Referrer hoặc Origin hoặc maliciousSite.com
là giả mạo thành công rằng liên kết giới thiệu/nguồn gốc là fakebank.com.
Nếu bạn có thể đưa javascript vào trình duyệt của người dùng để bắt đầu cuộc tấn công, bạn sẽ chỉ cần nhúng một số jquery để thực hiện yêu cầu GET, phân tích cú pháp, sau đó thực hiện POST trong cùng một '
Và đó chính xác là vấn đề. Same Origin Policy trong trình duyệt không cho phép NHẬN yêu cầu đến các trang web khác. Vì vậy, không có trang nào có thể lấy mã thông báo CSRF từ mã khác chỉ bằng cách sử dụng Javascipt trong trình duyệt.
Nguồn
2013-04-17 01:13:42 deceze