2010-03-02 50 views
16

Tôi muốn người dùng có thể chọn hộp "nhớ thông tin đăng nhập của tôi" trên trang web của tôi để họ không cần đăng nhập mỗi khi họ đến. Vì vậy, tôi cần phải lưu trữ một ID duy nhất trong một cookie để xác định chúng. Có an toàn khi băm mật khẩu của họ với sha512 và một muối dài trong PHP và lưu trữ giá trị đó trong cookie không? Nếu cookie bị đánh cắp, mật khẩu của họ có bị rủi ro không? Rõ ràng nó phải được kết nối với mật khẩu của họ bằng cách nào đó, nếu không, nếu giá trị cookie đã được đoán hoặc bị đánh cắp, người dùng sẽ không thể ngăn người khác đăng nhập.Bạn có nên lưu trữ mật khẩu băm trong cookie không?

Ngoài ra, bạn nên sử dụng GUID định danh duy nhất?

Cảm ơn, Bến

+4

Bạn sẽ không cần phải lưu trữ mật khẩu để 'nhớ' người dùng, phải không? –

+0

@ o.k.w: Nó được sử dụng để xác thực lại người dùng. – Gumbo

Trả lời

3

Có một rủi ro thấp với một thuật toán tốt và muối lớn, nhưng tại sao mất bất kỳ rủi ro không cần thiết?

Nếu bạn chỉ cần xác định người dùng, hãy lưu trữ thứ gì đó có thể xác định duy nhất người dùng, như guid cùng với một số mã xác minh được lưu trữ khác (không phải mật khẩu của họ, chuỗi dài ngẫu nhiên). Tôi sẽ không sử dụng một guid một mình vì nó sẽ không phải là một phương pháp xác thực an toàn.

+0

Bạn nên xóa hoặc sửa đổi "chuỗi dài ngẫu nhiên" này khi/nếu mật khẩu được thay đổi, vì sợ người dùng (hoặc ai đó có cookie nói trên) đã trình bày một cookie như vậy sau khi mật khẩu được thay đổi (hoặc người dùng không được chọn, hãy nhớ tôi, hoặc ...) – mjv

+4

"Chuỗi dài ngẫu nhiên" sẽ hết hạn thường xuyên hơn khi mật khẩu thay đổi, lý tưởng nhất là ở mỗi lần đăng nhập. –

+1

Chuỗi trỏ đến một người dùng. Nó không có gì để làm với xác thực. Bạn có thể xóa nó bất cứ khi nào bạn muốn hết hạn các thông tin đăng nhập được lưu trong bộ nhớ cache, thông tin này thực sự không liên quan đến việc thay đổi mật khẩu. –

21

Hãy nhớ rằng, mật khẩu của mật khẩu có hiệu quả giống với mật khẩu của chúng. Ai đó đã lấy cắp băm sẽ có cùng quyền truy cập vào tài khoản của người dùng như thể họ đã lấy cắp mật khẩu của họ. Do đó, không phải là nên lưu trữ băm mật khẩu của người dùng trong cookie trừ khi có một số thông tin khác không được lưu trữ với cookie được sử dụng để xác thực (tức là xác thực 2 yếu tố).

+0

+1 chính xác, nếu không thì điểm nào thậm chí còn băm mật khẩu ngay từ đầu? Nó được thiết kế để trì hoãn kẻ tấn công! – rook

+2

Tôi tự hỏi tại sao ai đó bỏ phiếu cho câu trả lời này. – Gabe

+0

điều này tất nhiên giả định rằng kẻ tấn công biết thuật toán băm được sử dụng và liệu muối có liên quan hay không ... vẫn không khuyến khích – zzzzBov

2

Sẽ không có hại khi có một số loại "mật khẩu" trong cookie cùng với id người dùng (để ngăn người dùng thay đổi uid thành người dùng khác), chỉ cần không tạo "mật khẩu" giống như mật khẩu của người dùng thực tế. Và chỉ vì nó là một băm không nhất thiết có nghĩa là nó một chiều (tốt, theo định nghĩa của nó, nhưng có những tiện ích để tạo ra các bản rõ ràng MD5 và tôi đoán đó chỉ là vấn đề thời gian trước khi nó xảy ra với những người khác).). Tôi sẽ băm một số loại mật khẩu phụ.

12

Here là một bài viết tuyệt vời về chủ đề này. Nhiều người trong số các câu trả lời cho câu hỏi của bạn là đánh vào các kỹ thuật được nêu trong đó.

+0

Cảm ơn Chris, đó thực sự là một bài viết tuyệt vời –

2

Một cách khác để thực hiện việc này có thể là sử dụng cookie làm bộ nhớ được mã hóa cho dữ liệu duy nhất. Bạn sẽ cần một số loại mã định danh không mã hóa có thể phục vụ như một con trỏ tới khóa (hoặc thông tin bắt buộc để lấy khóa) trong cơ sở dữ liệu của ứng dụng, theo sau là một blob được mã hóa bằng khóa thu được từ mã định danh. một số loại định danh có thể sử dụng một lần để xác thực phiên.

Với giả định sau:

  • cơ sở dữ liệu của bạn được an toàn (ví dụ, ứng dụng của bạn có thể truy cập vào nó, nhưng người dùng của bạn không thể trực tiếp làm như vậy, và cũng có thể giả định rằng các ứng dụng đã được khả năng chống chống SQL injection)
  • Muối của bạn rất mạnh; đó là, entropy hợp lý đủ cao mà cố gắng để crack mật khẩu muối là không khả thi ngay cả khi mật khẩu được biết đến

Sau đó, điều này sẽ là một cách hợp lý nhất định rằng phiên đó là không thể bị tấn công hoặc bị đánh cắp dưới bất kỳ hình thức nào.Đó là để nói rằng một cookie sao chép chỉ là hữu ích hạn chế, vì người dùng không phải đã sử dụng cookie giữa trộm cắp và sử dụng của nó bởi một kẻ tấn công.

Trong khi điều này bảo vệ chống lại phát lại, điều đó cũng có nghĩa là nếu ai đó quản lý để ăn cắp cookie đúng lúc và quản lý cũng sử dụng nó trước khi người dùng hợp pháp ban đầu thực hiện, kẻ tấn công hiện đang nắm quyền kiểm soát phiên. Người ta có thể giới hạn một phiên tới một địa chỉ IP để giảm thiểu rủi ro đó (phần nào đó, nếu cả người dùng và kẻ tấn công đều đứng sau cùng NAT, đó là kịch bản có khả năng nhất trong bất kỳ mạng gia đình hoặc doanh nghiệp vừa và nhỏ). là khá tranh luận, vì địa chỉ IP có vẻ giống nhau. Cũng hữu ích có thể là hạn chế đối với tác nhân người dùng hiện tại (mặc dù điều đó có thể phá vỡ đột ngột nếu người dùng cập nhật trình duyệt của họ và phiên không hết hạn vào thời gian đóng trình duyệt) hoặc tìm một số phương pháp để người dùng có thể xác định máy tính cũng đủ để có sự chắc chắn hợp lý rằng người dùng đã không chuyển cookie từ hệ thống này sang hệ thống khác. Ngắn của việc sử dụng một số plugin nhị phân (Flash, hoặc Silver/Moonlight), tôi không chắc chắn rằng sau này là có thể.

Để bảo vệ chống lại một phiên vĩnh viễn chiếm đoạt, yêu cầu người dùng xác thực lại theo định kỳ (ví dụ: giới hạn thời gian phiên được phép hoặc yêu cầu mã thông báo/fob/dongle) và yêu cầu người dùng xác nhận lại anh ta- hoặc khi bước vào các khu vực nhạy cảm của ứng dụng, chẳng hạn như thay đổi mật khẩu và các hành động, mẫu hoặc hành vi nguy hiểm tiềm tàng như xóa dữ liệu, các mẫu sử dụng bất thường, hành động hàng loạt, v.v.

Rất khó để bảo mật các ứng dụng mà vẫn giữ được tính dễ sử dụng của chúng. Nếu được thực hiện một cách cẩn thận, bảo mật có thể được thực hiện theo cách thức tối thiểu xâm nhập và vẫn hiệu quả - tốt, đối với hầu hết các ứng dụng phải đối mặt với Internet, dù sao đi nữa.

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