2009-07-17 27 views

Trả lời

5

Điều này gần đây 2009 chapter trong Spring Security 3.0 thảo luận về xác thực loại Remember-Me. Các khái niệm chung không dành riêng cho Spring Security để bạn có thể hưởng lợi từ nó ngay cả khi bạn không sử dụng nó. Chương này cũng trích dẫn bài đăngcủa Barry Jaspan, đây là một cải tiến so với các kỹ thuật được mô tả trong bài đăng 2004 blog của Charles Miller.

Các entry blog về cơ bản đi xuống đến:

  1. Khi người dùng đăng nhập thành công với Ghi nhớ kiểm tra, một cookie đăng nhập được ban hành, thêm vào các tập tin cookie quản lý chuẩn của phiên.

    • Cookie đăng nhập chứa tên người dùng, số nhận dạng chuỗi và mã thông báo. Chuỗi và mã thông báo là các số ngẫu nhiên không thể tránh khỏi từ một không gian lớn phù hợp. Cả ba được lưu trữ cùng nhau trong một bảng cơ sở dữ liệu.

    • Khi người dùng không đăng nhập truy cập trang web và hiển thị cookie đăng nhập, tên người dùng, chuỗi và mã thông báo được tra cứu trong cơ sở dữ liệu.

    • Nếu bộ ba có mặt, người dùng được coi là được xác thực. Mã thông báo đã sử dụng được xóa khỏi cơ sở dữ liệu. Một mã thông báo mới được tạo ra, được lưu trữ trong cơ sở dữ liệu với tên người dùng và cùng một số nhận dạng, và một cookie đăng nhập mới chứa tất cả ba được cấp cho người dùng.
    • Nếu tên người dùng và chuỗi có mặt nhưng mã thông báo không khớp, hành vi trộm cắp được giả định. Người dùng nhận được cảnh báo mạnh mẽ và tất cả các phiên nhớ của người dùng sẽ bị xóa.
    • Nếu không có tên người dùng và chuỗi, cookie đăng nhập sẽ bị bỏ qua.
+0

Các bài đăng trên blog đó thực sự thú vị – nos

0

Chỉ là một cookie có giá trị lâu dài được gán. Tuy nhiên, nó sẽ chỉ hoạt động miễn là cookie tồn tại. Ví dụ, tôi có Firefox của tôi thiết lập để xóa cookie của tôi khi tôi đóng trình duyệt. Vì vậy, điều này sẽ không làm việc cho tôi.

+0

Vâng, tôi giả sử bạn làm điều gì đó nhiều hơn một chút thông minh hơn thứ tiếng nói, hex mã hóa, tên người dùng trong một cookie ..? – nos

+0

Id người dùng trong một cookie và sau đó mật khẩu được mã hóa sẽ hoạt động. Tôi sẽ không lưu trữ tên người dùng vì chúng thường được người dùng khác của trang web biết đến và do đó dễ tái tạo. Mặc dù bạn có thể mã hóa tên người dùng và sử dụng mật khẩu làm khóa bảo mật hơn rất nhiều. – IllusivePro

+0

Đặt ID phiên hoặc một số băm duy nhất trong cookie. Lưu trữ phía máy chủ. Người dùng của anh ta trả về, bạn có thể tra cứu anh ấy trong DB. –

0

Cookie, nhưng người dùng có thể quyết định xóa nó.

Trong cùng tinh thần, có một số loại giải pháp, sử dụng Flash. Flash có thể lưu trữ thông tin về phía máy khách, không phải cookie, nó không bị xóa (thường) bởi trình duyệt. Với nó, bạn có thể nhớ người dùng nào đang yêu cầu các trang nhưng bạn bị kẹt bằng cách sử dụng giải pháp sử dụng plugin và cần biết Flash ..

Tôi không thấy bất kỳ giải pháp nào khác.

2

Signed cookie mà không thể giả mạo có thể là một ý tưởng tốt khi bạn không cần một tổng thể server-side bang ... bình nạc và hiệu quả.

Bạn vẫn có nguy cơ bị trộm cắp cookie nhưng bạn luôn có thể đăng nhập cookie bằng địa chỉ IP, Tác nhân người dùng và những thứ khác để giúp giảm thiểu mối đe dọa.

+0

Khó truy cập trộm cắp cookie, vì người dùng phải bảo mật máy tính của mình:/ –

+0

Nhưng bạn có thể xác thực rằng cookie chưa chuyển sang môi trường khác theo một số cách. –

+0

Việc đăng nhập cookie theo một cách nào đó là quan trọng. Nếu không, ai đó có thể dễ dàng sao chép giá trị cookie và sử dụng nó trên một máy khác. Ngoài ra, điều này có vẻ như thông thường, nhưng không lưu trữ giá trị cookie dưới dạng văn bản thuần túy. Mã hóa nó theo một cách nào đó để khó giả mạo hơn. Tôi đã thấy các nhà thiết kế web rất mới làm quen với quá đáng tin cậy với các giá trị cookie. –

0

Đừng cố tự mình triển khai cookie phiên.

Hầu hết các khung công tác web cung cấp cho bạn một trừu tượng về điều này, để lại cho bạn sự quan tâm về nhiều vấn đề bảo mật mà bạn có thể đang tự phơi bày.

Một API đơn giản trong pseudo-code trong một khuôn khổ web có thể trông giống như thế này, trong lần đăng nhập:

authFrwk.loginUser(request.POST.get(username), request.POST.get(password)); 

này sẽ trở lại một cookie cho khách hàng (xử lý độc quyền bởi khuôn khổ).

Một hoạt động một cách an toàn có thẩm quyền sẽ xem xét một cái gì đó như thế này:

if (authFrwk.isLoggedOn()) // implicitly checks user session cookie 
    doSomethingImportant(); 
else 
    return notLoggedInMsg(); 

Về cơ bản, một cookie phiên được đưa ra một ID duy nhất trên server-side, mà một người sử dụng malacious không thể tạo/đoán bởi chính mình, và đó xác định khách hàng là người dùng đã đăng nhập.

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