2012-03-31 27 views
10

Câu hỏi này mang tính tái bảo hiểm cao hơn một câu hỏi trực tiếp về cách viết mã. Là một autodidact tôi không có nhiều khả năng để hỏi các chuyên gia những điều như vậy, vì vậy tôi cố gắng ở đây.Trong trường hợp nào có thể miễn trừ CSRF là nguy hiểm?

Tôi đã đọc các tài liệu trong django-docs (https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/) và một số thông tin trên trang đó: http://cwe.mitre.org/top25/#CWE-352

Theo như tôi đã hiểu, django cung cấp một mã thông báo (một số loại pin-code) để một người dùng. Và để xác minh nó thực sự là anh ta, anh ta phải trả lại nó trong lần tiếp theo anh ta yêu cầu. Và một số người ở Google phát hiện ra rằng điều này thậm chí có thể với các yêu cầu ajax, đó là lý do tại sao chúng tôi cũng có chính sách bảo vệ chúng mới kể từ 1.2.6. Và CSRF là về một người nào đó cho tôi một cái gì đó (mã nguy hiểm, xấu, các tệp tham nhũng hoặc một cái gì đó tương tự) giả vờ là một người khác.

Vì vậy, nếu tôi có một số mã như thế này:

@csrf_exempt  
def grab(request): 
    """ 
    view to download an item 
    POST because it stores that a user has downloaded this item 
    """ 
    item_id = request.POST.get('item', None) 
    if not loop: return HttpResponseBadRequest('no item id provided') 
    item = Item.objects.get(pk=int(item_id)) 

rằng nên tiết kiệm, vì tôi không cho truy cập vào cơ sở dữ liệu hoặc bất kỳ phần nào của ứng dụng của tôi trước khi cố gắng để chuyển đổi các giá trị nhất định để một số nguyên. Và không có quá nhiều thiệt hại nếu tôi làm một hồ sơ sai của một người nào đó tải một tập tin (trong trường hợp này nó gần như là không có). Giả sử tôi sẽ viết các hóa đơn dựa trên quan điểm này, việc miễn trừ CSRF sẽ thay đổi ý tưởng tồi (Có đúng không?).

Tôi cũng không hiểu tại sao ai đó không thể lấy cắp mã thông báo CSRF từ người dùng và sử dụng nó để vẫn lừa tôi (hoặc người dùng). Vì vậy, tôi có một số câu hỏi về chủ đề này:

1) là các giả định của tôi từ bên phải không?

2) ai đó có thể cho tôi biết, những gì (và có thể là như thế nào) một số người không tốt đẹp có thể sử dụng chế độ xem ở trên để thực hiện các thủ đoạn bẩn thỉu và họ sẽ là gì?

3) là một CSRF là một ví dụ về một cuộc tấn công ở giữa, là nó chỉ liên quan đến nó, hay là nó hoàn toàn khác?

4) Bất kỳ liên kết có giá trị nào để đọc thêm về những nguy hiểm như vậy?

Có thể một số câu hỏi này không được thông báo đầy đủ, nhưng tôi đang cố vượt qua điều đó. Tôi sẽ rất vui nếu có ai đó có thể giúp tôi.

Trả lời

9

CSRF attacks sắp bắt buộc trình duyệt nạn nhân gửi yêu cầu giả mạo. Một đơn giản <img> hoặc tự động gửi <form> đủ để thực hiện việc này cho cả phương thức GET và POST. Và khi các yêu cầu được gửi bởi trình duyệt, nó sẽ gửi bất kỳ thông tin đăng nhập xác thực nào và do đó làm cho các yêu cầu có vẻ chân thực và hợp pháp theo quan điểm của máy chủ vì chúng về cơ bản không khác với các yêu cầu do hành động của người dùng khởi xướng.

Và đó chính xác là những gì mã thông báo CSRF được sử dụng để: thiết lập sự khác biệt giữa các yêu cầu được người dùng bắt đầu và những yêu cầu được trang web của bên thứ ba giả mạo. Với mục đích này, mã thông báo CSRF hoạt động như một bí mật chỉ được biết đến với máy chủ và người dùng. Máy chủ đặt bí mật trong tài liệu trong một phản hồi và hy vọng nó sẽ được gửi trở lại trong yêu cầu tiếp theo.

Và khi bí mật được nhúng vào tài liệu của phản hồi được gán cho người dùng cụ thể này, kẻ tấn công sẽ cần nghe trộm phản hồi cụ thể hoặc truy cập tài liệu theo cách khác. Chắc chắn có các cuộc tấn công lấy mã thông báo CSRF (e. G. eavesdropping, MITM, XSS, v.v.). Nhưng nếu bạn được bảo vệ khỏi những cuộc tấn công đó, kẻ tấn công sẽ không thể giả mạo một yêu cầu xác thực.

+0

Có một ánh sáng mờ xuất hiện ở cuối đường hầm ... Vì vậy, nếu tôi muốn gửi những điều xấu đến máy chủ, trước tiên tôi phải gửi một số dữ liệu đến một số trình duyệt của người dùng. Trong dữ liệu này tôi ẩn một số hình thức tự động gửi bài gửi đến máy chủ bị tấn công. Tôi cho rằng người dùng đã đăng nhập vào máy chủ đó, bởi vì anh ta có một tài khoản ở đó. Và nếu máy chủ không kiểm tra một số mã thông báo, nó sẽ chỉ phải tin rằng yêu cầu đó là hợp pháp. Ít nhất tôi có một ý tưởng bây giờ nó hoạt động như thế nào, và nơi để vẽ đường đến MIM và XSS. Cảm ơn vì điều đó. – marue

+0

@marue CSRF không phải là gửi dữ liệu độc hại đến máy chủ. Chủ yếu là về mạo danh vì trang web tấn công có thể gửi yêu cầu hợp pháp và xác thực thay mặt cho nạn nhân. Eavesdropping, MITM và XSS chỉ có nghĩa là nắm bắt mã thông báo CSRF giảm thiểu (mặc dù vì hầu hết các lược đồ quản lý xác thực sử dụng các phiên dựa trên cookie, bạn cũng có thể lấy ID phiên thay thế). – Gumbo

+0

Vì vậy, CSRF là tất cả và "chỉ" về giả vờ là một người bạn không? Trường hợp không chỉ có nghĩa là không quan trọng, nhưng mọi thứ khác là một vector tấn công khác nhau. – marue

6

CSRF tấn công

tôi lừa bạn xem một trang web nơi tôi chèn một số mã (một yêu cầu, thường thông qua img hoặc form) đến trang web khác (nơi bạn có thể có một số quyền).

dụ vô hại

<img src="http://www.yoursite.net/changelanguage?lang=fr"> 

tôi tàn nhẫn thay đổi ngôn ngữ của phiên của bạn để tiếng Pháp. Ôi không! Bạn có thể an toàn loại bỏ bảo vệ csrf và lưu một hit db.

ví dụ nguy hiểm

<img src="http://www.yourbank.net/sendmoney?amt=9999&account=123> 

Nếu bạn đã đăng nhập trong yourbank.net (và nó không có CSRF hoặc bất kỳ sự bảo vệ khác), tài khoản của bạn sẽ cảm thấy nhẹ nhàng hơn bởi bây giờ. (Tôi 123.)

<img src="http://www.yoursite.net/admin/users/123/edit?admin=1"> 

Nếu bạn đã đăng nhập trong yoursite.net như một admin, sau đó cả hai chúng tôi. (Tôi 123.)

+1

Khá hữu ích khi có những ví dụ này, cảm ơn bạn. – marue

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