Tôi muốn tạo hệ thống đăng nhập người dùng cho mục đích học tập. Tôi có một số câu hỏi.Cách thích hợp để triển khai hệ thống đăng nhập người dùng
Tôi đã thực hiện một số nghiên cứu và thấy rằng cách thích hợp để triển khai hệ thống đăng nhập của người dùng là ghi nhớ tên người dùng/id và phiên bản mã hóa/băm được mã hóa trong cơ sở dữ liệu. Khi người dùng đăng nhập, mã phía máy khách sẽ mã hóa mật khẩu bằng MD5 hoặc SHA-1 hoặc một cái gì đó tương tự, và sau đó gửi mật khẩu được mã hóa này đến phía máy chủ và sau đó so sánh nó với mật khẩu trong cơ sở dữ liệu. Nếu chúng được khớp, người dùng đăng nhập thành công.
Cách triển khai này có thể ngăn chặn người quản trị cơ sở dữ liệu hoặc người lập trình thấy văn bản thực sự của mật khẩu trong cơ sở dữ liệu. Nó cũng có thể ngăn chặn tin tặc chặn mật khẩu thực trong quá trình chuyển trên Internet. Tuy nhiên, tôi có một cái gì đó mà tôi không hiểu.
câu hỏi đầu tiên của tôi là, những gì nếu hacker biết phiên bản băm/mã hóa mật khẩu (bằng cách hack cơ sở dữ liệu) hoặc DBA, các lập trình viên có được phiên bản hash của mật khẩu bằng cách chỉ đơn giản là nhìn thấy những văn bản trong cơ sở dữ liệu , sau đó họ có thể dễ dàng tạo một chương trình gửi phiên bản băm mật khẩu này tới phía máy chủ và sau đó thực hiện so sánh và sau đó đăng nhập thành công. Nếu họ có thể làm điều đó, việc mã hóa mật khẩu có vẻ không hữu ích. Tôi nghĩ tôi hiểu nhầm điều gì đó ở đây.
Câu hỏi thứ hai là, đây là cách tôi mô tả ở trên là cách phổ biến nhất và phù hợp để triển khai chức năng đăng nhập của người dùng trong ngành hiện tại? Tôi có phải làm tất cả mọi thứ theo cách thủ công hoặc một số cơ sở dữ liệu có một số khả năng tích hợp để làm điều tương tự không? Có cách nào phổ biến nhất/phương pháp đăng nhập người dùng cho trang web hoặc ứng dụng web không? Nếu có, vui lòng cung cấp cho tôi một số chi tiết.
Công ty cũ của tôi đã sử dụng couchDB để lưu trữ thông tin đăng nhập của người dùng bao gồm cả mật khẩu. Họ không làm quá nhiều về công cụ mã hóa. Họ nói couchDB sẽ tự động mã hóa mật khẩu và lưu trữ nó trong các tài liệu. Tôi không chắc đây có phải là cách an toàn hay không. Nếu vậy, sau đó nó là khá thuận tiện cho các lập trình viên vì nó tiết kiệm rất nhiều công việc.
Bằng cách này (điểm 3) có đủ an toàn để sử dụng bình thường không? Hệ thống cơ sở dữ liệu khác như mySQL có loại khả năng này có thể làm điều tương tự không? Nếu vậy, có nghĩa là sử dụng phương pháp tích hợp mySQL có đủ an toàn không?
Tôi không tìm cách bảo mật chức năng đăng nhập người dùng rất an toàn. Tôi đang tìm kiếm một cách phổ biến, dễ thực hiện, thích hợp, đủ an toàn cho hầu hết các ứng dụng web. Xin vui lòng cho tôi một lời khuyên. Chi tiết được cung cấp sẽ thực sự được đánh giá cao.
Điều gì sẽ xảy ra nếu hệ thống băm bên mật khẩu, với muối công cộng, sau đó khôi phục phía máy chủ mật khẩu bằng muối riêng (tức là chuỗi được lưu trữ trên máy chủ hoặc muối được tạo ngẫu nhiên trên máy chủ)? Bằng cách này, máy chủ sẽ không bao giờ biết mật khẩu văn bản thuần túy thực sự, không phải phiên bản thuần văn bản của mật khẩu sẽ được gửi đến máy chủ bất kỳ lúc nào để hacker tìm nạp. Tôi biết, rằng một người đàn ông trung niên vẫn có thể lấy mật khẩu băm, và cố gắng gây sức ép với muối trong javascript, nhưng vẫn còn, nó sẽ làm cho cuộc sống của anh ta khó khăn hơn đáng kể, phải không? –
Nếu khách hàng gửi mật khẩu băm đến máy chủ thì mật khẩu * băm * thực sự là mật khẩu thực. Nếu một hacker chặn mật khẩu băm mà họ có thể gửi nó đến máy chủ mà không biết bản gốc chưa được giải mã và máy chủ sẽ chấp nhận nó. –
Có, nhưng điều này cũng đúng với mật khẩu thuần văn bản đang được gửi đến máy chủ. Nếu một hacker chặn nó, nó có thể sử dụng nó đơn giản và đơn giản để đăng nhập vào tài khoản.Tuy nhiên, nếu mật khẩu văn bản thuần túy được băm, nếu một hacker chặn nó, anh ta chỉ có thể đăng nhập vào trang web cụ thể đó, và không truy cập vào bất kỳ trang web nào khác mà khách hàng có thể có cùng mật khẩu. –