2011-01-19 37 views
9

Những rủi ro chính xác mà tôi đang phơi bày nếu tôi không sử dụng mã thông báo csrf trong biểu mẫu của mình là gì? Tôi không tìm kiếm các nhãn đơn giản hoặc tên của các rủi ro, bởi vì chúng có thể gây nhầm lẫn. Tôi cần phải hiểu chính xác kẻ tấn công có thể làm gì và chỉ trong hoàn cảnh nào họ có thể làm được điều này, bằng tiếng Anh đơn thuần.Biểu mẫu không có mã thông báo CSRF: những rủi ro là gì

+8

Nghe như ai đó đang cố gắng tìm hiểu thêm về bảo mật ứng dụng. – park

Trả lời

9

Lỗ hổng CSRF là một lỗ hổng cho phép người dùng độc hại (hoặc trang web) thực hiện một người dùng không nghi ngờ thực hiện hành động trên trang web của bạn mà họ không muốn xảy ra.

Một số ví dụ thế giới thực sẽ là những thứ như nếu bạn cho phép người dùng xóa tài khoản qua GET thay vì POST, ai đó có thể đăng nhận xét sau trên trang web của bạn (giả sử trang web có cách đăng nhận xét hoặc đầu vào khác, vv)

Tôi nghĩ tôi sẽ đưa ra nhận xét trên trang web của bạn. Hãy xem hình ảnh tuyệt vời này!
< img src = 'http: //example.com/delete_my_account.php"/ >

Và bây giờ bất cứ lúc nào một logged in tải người dùng rằng trang, tài khoản của họ sẽ bị xóa nếu nó được thực hiện qua. POST thay vì GET, ai đó có thể tạo biểu mẫu và lừa người dùng gửi biểu mẫu đó và kết quả tương tự sẽ xảy ra. Trong khi đó nếu bạn đã sử dụng mã thông báo CSRF, điều này sẽ không thể thực hiện được. có thể tạo biểu mẫu POST cho trang web của bạn và thực hiện hành động không mong muốn.Vì vậy, giả sử trang web của bạn có một giỏ hàng không sử dụng mã thông báo CSRF. tton có nội dung "Nhấp vào đây để đăng ký", nhưng thực sự đặt hàng 1000 thứ gì đó từ trang web của bạn. Nếu người dùng đã đăng nhập từ trang web của bạn truy cập trang web độc hại này và nhấp vào nút, họ sẽ nhận được một bất ngờ thú vị trong thư.

Rõ ràng có những trường hợp khác, đây chỉ là một vài ví dụ. Tìm kiếm của Google sẽ hiển thị nhiều bài viết và hướng dẫn, nhiều trong số đó có thể sẽ có một số ví dụ khác. Wikipedia page cũng có một số ví dụ mà bạn có thể thấy thú vị. Ý tưởng chính của các ví dụ là ai đó có thể lừa trang web của bạn thực hiện một hành động như thể nó đến từ người dùng, khi người dùng thực sự không biết điều đó đang xảy ra hoặc không muốn điều đó xảy ra. Nếu bạn có bất kỳ loại hành động nào trên trang web của bạn phá hoại (tức là có thể xóa mọi thứ khỏi tài khoản người dùng, đăng xuất người dùng, v.v.) hoặc quan trọng (ví dụ: giao dịch bằng tiền), bạn có thể sử dụng mã thông báo CSRF. Nếu trang web của bạn chỉ là một anbom ảnh cho bạn bè, v.v. thì có thể bạn không cần phải bận tâm với các thẻ CSRF (mặc dù nó luôn tốt để thực hành khi bạn xây dựng một trang web cần chúng). Trừ khi bạn thêm một mã thông báo để đảm bảo rằng một yêu cầu đến từ một biểu mẫu trang web của bạn được trình bày cho người dùng một cách có chủ ý, bạn không thực sự có cách biết liệu người dùng có dự định thực hiện hành động hay không.

Vì vậy, bạn luôn muốn sử dụng mã thông báo duy nhất trên mọi biểu mẫu mà bạn tạo POST và xác thực bất kỳ yêu cầu nào được đăng lên trang web của bạn có mã thông báo hợp lệ cho người dùng hiện tại. Ngoài ra, hãy đảm bảo hết hạn mã thông báo sau một khoảng thời gian để chúng không tồn tại mãi mãi.

1

Tôi khuyên bạn nên đọc bài viết tuyệt vời này giải thích những gì CSRF là và cách bạn có thể bảo vệ mình tốt nhất chống lại nó.

+0

samquo bài viết giải thích rằng tôi là ngu ngốc: $ Nó có một phần "Ví dụ Khai thác" – Alfred

+1

@samquo trang web của bạn có lẽ sẽ không bị tấn công bởi điều này. Nhưng ví dụ nếu gmail không có bảo vệ CSRF khi cookie là SET, họ có thể gửi email bằng tài khoản của tôi. Đó là tất cả thực sự trong bài viết. Bạn nên đọc nó? – Alfred

+0

@samquo trang web của bạn có thể sẽ không bị tấn công bởi điều này. Nhưng ví dụ nếu gmail không có bảo vệ CSRF khi cookie là SET (tôi đã đăng nhập), họ có thể gửi email bằng tài khoản của tôi. Đó là tất cả thực sự trong bài viết. Bạn nên đọc nó? – Alfred

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