2012-06-09 17 views
9

Đây là một chi nhánh của một câu hỏi khác: What is the best way to implement "remember me" for a website?Luôn đăng nhập vào các phương pháp hay nhất: Tên người dùng trong cookie làm cách nào để bảo mật hơn?

Câu trả lời đầu là để thực hiện điều này: http://jaspan.com/improved_persistent_login_cookie_best_practice

Một bản tóm tắt:

Sử dụng một số ngẫu nhiên như một dòng Token, và một người khác dưới dạng Mã thông báo đăng nhập. Đặt các cookie đó vào cookie Lưu giữ đăng nhập, cùng với tên người dùng. Chỉ định cookie phiên thứ hai, bình thường. Mỗi lần người dùng đến mà không có cookie phiên, hãy sử dụng cookie Đã đăng nhập lưu trú. Phát hành mã mới, lần này bằng Mã thông báo đăng nhập ngẫu nhiên mới, giữ Mã số Mã thông báo giống nhau.

Tại sao bao gồm tên người dùng? Làm thế nào là giúp đỡ? Mã thông báo Series phải đủ để xác định người dùng và chuỗi. Series Token đã được thêm vào trong phương pháp này để ngăn chặn một cuộc tấn công DoS, nơi kẻ tấn công chỉ đoán tất cả tên người dùng và truy cập trang web cùng một lúc, đăng xuất tất cả mọi người. Nhưng tại sao nó lại có ý nghĩa khi bỏ tên người dùng?

+2

AFAICT bao gồm tên người dùng thực hiện hai việc. Thứ nhất, nó làm cho việc ghi nhớ đăng nhập trở nên khó khăn hơn bằng cách gửi các chuỗi số ngẫu nhiên. (DoS sẽ chỉ thành công nếu bạn đoán Mã thông báo chuỗi hợp lệ _and_ tên người dùng được ghép nối của nó.) Thứ hai, tên người dùng bảo vệ chống lại các va chạm vô tội giữa các Dòng sản phẩm được cấp cho người dùng khác nhau. Nếu không có tên người dùng, xung đột Dòng mã sẽ giống như một dấu hiệu trộm cắp. Tất nhiên nếu bạn có thể đảm bảo rằng mọi Mã thông báo mới là duy nhất trong số tất cả các Thẻ hàng loạt được phát hành trước đây vẫn còn hợp lệ thì đây không phải là vấn đề. – ottomeister

+0

Điều này có ý nghĩa nhất cho đến nay. Trong một hệ thống rất phân tán, trong đó việc kiểm tra tính độc đáo đối với Series Tokens không thực hiện được, tôi có thể thấy tại sao bạn lại bao gồm tên người dùng hoặc, tôi thích, một băm của tên người dùng. Nhưng nếu Series Tokens là duy nhất, cũng có thể lấy tên người dùng khỏi những kẻ tấn công tiềm năng. –

+0

Không tốt hơn khi sử dụng ID người dùng thay vì tên người dùng vì hiệu suất tra cứu số nguyên so với chuỗi không? – axelbrz

Trả lời

0

Tên người dùng và số lượng đang nhìn lên như một cặp trên máy chủ trước khi ban hành một cookie phiên làm việc mới. Nếu không có tên người dùng, nó sẽ kém an toàn hơn (có thể phát lại bằng cách sử dụng một người dùng khác nếu bạn đánh cắp số) và khó tìm kiếm hơn.

+3

1) Không khó để tra cứu. Mã thông báo chuỗi là một số duy nhất, đó là một tra cứu giá rẻ. 2) Làm thế nào nó có thể phát lại với một người dùng khác? Họ sẽ có một mã thông báo chuỗi khác nhau.Khi mã thông báo chuỗi bị thu hồi do tấn công không thành công, mã thông báo chuỗi hữu ích như một số ngẫu nhiên. –

0

Đoán của tôi về điều này:

Tên người dùng là để kiểm tra. Nếu bạn yêu cầu khách hàng gửi cùng với mã thông báo để xác thực, thì bạn biết người dùng nào sẽ được xác thực. Điều này cho phép bạn phản ứng theo cách thông minh với mã thông báo sai.

Nếu bạn chỉ yêu cầu token trong auth, sau đó bạn không biết được người dùng thực sự cố gắng nó và vào một trận đấu chỉ cấp quyền truy cập một ai đó nhưng không thể làm bất cứ điều gì trên Fail. Ai đó chỉ có thể cố gắng mù quáng đi qua chúng.

Với ý nghĩ đó chúng ta hãy nói rằng chúng ta giải quyết về việc sử dụng cả hai tên và mã thông báo. Bây giờ nếu mã thông báo sai, chúng tôi có thể xóa tất cả các mã thông báo khác cho người dùng đó. Nhưng điều đó mở ra hệ thống cho DOS. Kẻ tấn công có thể đăng xuất bất cứ ai theo ý muốn. Vì vậy, cho chuỗi đó được thêm vào.

Nó không phải là tên người dùng, một số thông tin khác mà sẽ cho phép để xác định người dùng sẽ làm việc quá.

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