Hướng dẫn keep me logged in javascript - giữ cho tôi đăng nhập javascript

Chủ đề cũ, nhưng vẫn là một mối quan tâm hợp lệ. Tôi nhận thấy một số phản hồi tốt về bảo mật và tránh sử dụng 'bảo mật thông qua tối nghĩa', nhưng các phương pháp kỹ thuật thực tế được đưa ra là không đủ trong mắt tôi. Những điều tôi phải nói trước khi tôi đóng góp phương pháp của mình:

  • Không bao giờ lưu trữ mật khẩu bằng văn bản rõ ràng ... bao giờ! store a password in clear text...EVER!
  • Không bao giờ lưu trữ mật khẩu băm của người dùng ở nhiều vị trí trong cơ sở dữ liệu của bạn. Phụ trợ máy chủ của bạn luôn có khả năng lấy mật khẩu băm từ bảng người dùng. Không hiệu quả hơn khi lưu trữ dữ liệu dự phòng thay cho các giao dịch DB bổ sung, thì nghịch đảo là đúng. store a user's hashed password in more than one location in your database. Your server backend is always capable of pulling the hashed password from the users table. It's not more efficient to store redundant data in lieu of additional DB transactions, the inverse is true.
  • ID phiên của bạn phải là duy nhất, vì vậy không có hai người dùng nào có thể chia sẻ ID, do đó mục đích của ID (số ID giấy phép lái của bạn có thể khớp với người khác không?) chuỗi độc đáo. Bảng phiên của bạn nên sử dụng ID làm PK. Để cho phép nhiều thiết bị được tin cậy cho ký hiệu tự động, hãy sử dụng một bảng khác cho các thiết bị đáng tin cậy chứa danh sách tất cả các thiết bị được xác thực (xem ví dụ của tôi bên dưới) và được ánh xạ bằng tên người dùng.ever share an ID, hence the purpose of an ID (could your Driver's License ID number ever match another persons? No.) This generates a two-piece unique combination, based on 2 unique strings. Your Sessions table should use the ID as the PK. To allow multiple devices to be trusted for auto-signin, use another table for trusted devices which contains the list of all validated devices (see my example below), and is mapped using the username.
  • Nó không phục vụ mục đích để băm dữ liệu đã biết vào cookie, cookie có thể được sao chép. Những gì chúng tôi đang tìm kiếm là một thiết bị người dùng tuân thủ để cung cấp thông tin xác thực không thể lấy được mà không có kẻ tấn công làm ảnh hưởng đến máy của người dùng (một lần nữa, xem ví dụ của tôi). Tuy nhiên, điều này có nghĩa là một người dùng hợp pháp cấm thông tin tĩnh của máy (tức là địa chỉ MAC, tên máy chủ thiết bị, người dùng nếu bị hạn chế bởi trình duyệt, v.v.) Sử dụng tính năng này. Nhưng nếu đây là một mối quan tâm, hãy xem xét thực tế rằng bạn đang cung cấp ký hiệu tự động cho người dùng tự nhận mình là duy nhất, vì vậy nếu họ từ chối được biết đến bằng cách giả mạo máy Mac của họ, giả mạo người dùng của họ, giả mạo/thay đổi tên máy chủ của họ, ẩn đằng sau proxy, vv, sau đó chúng không thể nhận dạng được và không bao giờ được xác thực cho một dịch vụ tự động. Nếu bạn muốn điều này, bạn cần xem xét truy cập thẻ thông minh đi kèm với phần mềm phía máy khách thiết lập danh tính cho thiết bị đang được sử dụng.identify themselves uniquely, so if they refuse to be known by spoofing their MAC, spoofing their useragent, spoofing/changing their hostname, hiding behind proxies, etc., then they are not identifiable, and should never be authenticated for an automatic service. If you want this, you need to look into smart-card access bundled with client-side software that establishes identity for the device being used.

Tất cả đang được nói, có hai cách tuyệt vời để ký tự động trong hệ thống của bạn.

Đầu tiên, cách rẻ tiền, dễ dàng đặt tất cả lên người khác. Nếu bạn thực hiện hỗ trợ trang web của mình đăng nhập, giả sử, tài khoản Google+ của bạn, bạn có thể có một nút Google+ được sắp xếp hợp lý Đã ký vào Google). Nếu bạn muốn người dùng tự động đăng nhập nếu họ đã đăng nhập với trình xác thực được tin cậy và được hỗ trợ và đã kiểm tra hộp để làm như vậy, hãy yêu cầu các tập lệnh phía máy khách của bạn thực hiện mã sau nút 'Đăng nhập với' trước khi tải trước khi tải , chỉ cần chắc chắn rằng máy chủ lưu trữ một ID duy nhất trong bảng ký hiệu tự động có tên người dùng, ID phiên và trình xác thực được sử dụng cho người dùng. Vì các phương thức đăng nhập này sử dụng AJAX, dù sao bạn cũng đang chờ phản hồi và phản hồi đó là phản hồi được xác thực hoặc từ chối. Nếu bạn nhận được phản hồi được xác thực, hãy sử dụng nó như bình thường, sau đó tiếp tục tải người dùng đã đăng nhập như bình thường. Mặt khác, đăng nhập không thành công, nhưng đừng nói với người dùng, chỉ cần tiếp tục khi không đăng nhập, họ sẽ nhận thấy. Điều này là để ngăn chặn một kẻ tấn công đã đánh cắp cookie (hoặc giả mạo chúng trong nỗ lực leo thang các đặc quyền) khỏi việc học rằng người dùng tự động ký tên vào trang web.

Điều này là rẻ, và cũng có thể được một số người coi là bẩn bởi vì nó cố gắng xác nhận khả năng của bạn đã có thể ký kết với các địa điểm như Google và Facebook, mà thậm chí không nói với bạn. Tuy nhiên, không nên sử dụng cho người dùng không được yêu cầu tự động ký trang web của bạn và phương pháp cụ thể này chỉ dành cho xác thực bên ngoài, như với Google+ hoặc FB.

Bởi vì một trình xác thực bên ngoài đã được sử dụng để nói với máy chủ đằng sau hậu trường cho dù người dùng có được xác thực hay không, kẻ tấn công không thể có được bất cứ thứ gì khác ngoài ID duy nhất, là vô ích. Tôi sẽ giải thích:

  • Người dùng 'Joe' truy cập trang web lần đầu tiên, ID phiên được đặt trong cookie 'phiên'.
  • Người dùng 'Joe' nhật ký, leo thang các đặc quyền, nhận ID phiên mới và gia hạn cookie 'phiên'.
  • Người dùng 'Joe' chọn chữ ký tự động bằng Google+, nhận được một ID duy nhất được đặt trong cookie 'neekmesignedin'.
  • Người dùng 'Joe' có Google giữ cho họ đăng nhập, cho phép trang web của bạn tự động ký tên người dùng bằng Google trong phần phụ trợ của bạn.
  • Kẻ tấn công cố gắng một cách có hệ thống ID duy nhất cho 'KeepMesignedin' (đây là kiến ​​thức công khai được trao cho mọi người dùng) và không được ký vào bất kỳ nơi nào khác; cố gắng ID duy nhất được trao cho 'Joe'.
  • Máy chủ nhận ID duy nhất cho 'Joe', kéo khớp trong DB cho tài khoản Google+.
  • Máy chủ gửi kẻ tấn công đến trang đăng nhập chạy yêu cầu AJAX tới Google để đăng nhập.
  • Google Server nhận được yêu cầu, sử dụng API của mình để xem kẻ tấn công hiện không được đăng nhập.
  • Google gửi phản hồi rằng hiện không có người dùng đăng ký qua kết nối này.
  • Trang của kẻ tấn công nhận được phản hồi, tập lệnh tự động chuyển hướng đến trang đăng nhập với giá trị bài đăng được mã hóa trong URL.
  • Trang đăng nhập nhận được giá trị bài đăng, gửi cookie cho 'netsmesignedin' đến một giá trị trống và hợp lệ cho đến ngày 1-1-1970 để ngăn chặn nỗ lực tự động, khiến trình duyệt của kẻ tấn công chỉ cần xóa cookie.
  • Kẻ tấn công được cung cấp trang đăng nhập lần đầu bình thường.

Bất kể điều gì, ngay cả khi kẻ tấn công sử dụng ID không tồn tại, nỗ lực sẽ thất bại trong mọi nỗ lực trừ khi nhận được phản hồi được xác thực.

Phương pháp này có thể và nên được sử dụng cùng với trình xác thực nội bộ của bạn cho những người đăng nhập vào trang web của bạn bằng trình xác thực bên ngoài.

=========

Bây giờ, đối với hệ thống xác thực rất riêng của bạn có thể tự động ký tên người dùng, đây là cách tôi làm điều đó:

DB có một vài bảng:

TABLE users: UID - auto increment, PK username - varchar(255), unique, indexed, NOT NULL password_hash - varchar(255), NOT NULL ...

Lưu ý rằng tên người dùng có khả năng dài 255 ký tự. Tôi có chương trình máy chủ của mình giới hạn tên người dùng trong hệ thống của mình xuống còn 32 ký tự, nhưng trình xác thực bên ngoài có thể có tên người dùng với tên miền @của chúng lớn hơn thế, vì vậy tôi chỉ hỗ trợ độ dài tối đa của địa chỉ email để tương thích tối đa.

TABLE sessions: session_id - varchar(?), PK session_token - varchar(?), NOT NULL session_data - MediumText, NOT NULL

Lưu ý rằng không có trường người dùng trong bảng này, vì tên người dùng, khi đăng nhập, có trong dữ liệu phiên và chương trình không cho phép dữ liệu null. Session_id và session_token có thể được tạo bằng băm MD5 ngẫu nhiên, băm SHA1/128/256, tem DateTime với các chuỗi ngẫu nhiên được thêm vào sau đó băm, hoặc bất cứ điều gì bạn muốn Giảm thiểu các cuộc tấn công vũ phu từ thậm chí rời khỏi mặt đất và tất cả các băm được tạo bởi lớp phiên của bạn nên được kiểm tra các trận đấu trong bảng phiên trước khi cố gắng thêm chúng.

TABLE autologin: UID - auto increment, PK username - varchar(255), NOT NULL, allow duplicates hostname - varchar(255), NOT NULL, allow duplicates mac_address - char(23), NOT NULL, unique token - varchar(?), NOT NULL, allow duplicates expires - datetime code

Các địa chỉ MAC bởi bản chất của chúng được cho là duy nhất, do đó, mỗi mục có ý nghĩa là mỗi mục có một giá trị duy nhất. Mặt khác, tên máy chủ có thể được nhân đôi trên các mạng riêng biệt một cách hợp pháp. Có bao nhiêu người sử dụng "home-pc" làm một trong những tên máy tính của họ? Tên người dùng được lấy từ dữ liệu phiên bởi phụ trợ máy chủ, vì vậy việc thao túng nó là không thể. Đối với mã thông báo, nên sử dụng phương thức tương tự để tạo mã thông báo phiên cho các trang để tạo mã thông báo trong cookie cho dấu ký tự động của người dùng. Cuối cùng, mã DateTime được thêm vào khi người dùng cần xác nhận lại thông tin đăng nhập của họ. Hoặc cập nhật dữ liệu này trên đăng nhập người dùng giữ nó trong vòng vài ngày hoặc buộc nó phải hết hạn bất kể đăng nhập cuối cùng chỉ giữ nó trong một tháng hoặc lâu hơn, bất kể thiết kế nào của bạn ra lệnh.

Điều này ngăn ai đó giả mạo một cách có hệ thống Mac và tên máy chủ cho người dùng mà họ biết tự động ký tên. Không bao giờ có người dùng giữ cookie bằng mật khẩu của họ, rõ ràng văn bản hoặc nói cách khác. Có mã thông báo được tái tạo trên mỗi điều hướng trang, giống như bạn muốn phần mã thông báo phiên. Điều này làm giảm khả năng kẻ tấn công có thể có được cookie mã thông báo hợp lệ và sử dụng nó để đăng nhập. Một số người sẽ cố gắng nói rằng một kẻ tấn công có thể đánh cắp cookie từ nạn nhân và thực hiện một cuộc tấn công phát lại phiên để đăng nhập. Nếu kẻ tấn công có thể đánh cắp cookie (có thể), họ chắc chắn sẽ làm tổn hại toàn bộ thiết bị, có nghĩa là họ chỉ có thể sử dụng thiết bị để đăng nhập, đánh bại hoàn toàn mục đích ăn cắp cookie. Miễn là trang web của bạn chạy qua HTTPS (mà nó nên xử lý mật khẩu, số CC hoặc các hệ thống đăng nhập khác), bạn đã có khả năng bảo vệ cho người dùng mà bạn có thể trong trình duyệt.NEVER have the user keep a cookie with their password, clear text or otherwise. Have the token be regenerated on each page navigation, just as you would the session token. This massively reduces the likelihood that an attacker could obtain a valid token cookie and use it to login. Some people will try to say that an attacker could steal the cookies from the victim and do a session replay attack to login. If an attacker could steal the cookies (which is possible), they would certainly have compromised the entire device, meaning they could just use the device to login anyway, which defeats the purpose of stealing cookies entirely. As long as your site runs over HTTPS (which it should when dealing with passwords, CC numbers, or other login systems), you have afforded all the protection to the user that you can within a browser.

Một điều cần lưu ý: Dữ liệu phiên không nên hết hạn nếu bạn sử dụng ký hiệu tự động. Bạn có thể hết khả năng tiếp tục phiên sai, nhưng xác thực vào hệ thống sẽ tiếp tục dữ liệu phiên nếu dữ liệu liên tục dự kiến ​​sẽ tiếp tục giữa các phiên. Nếu bạn muốn cả dữ liệu phiên liên tục và không liên tục, hãy sử dụng một bảng khác để dữ liệu phiên liên tục với tên người dùng làm PK và có máy chủ lấy nó giống như dữ liệu phiên thông thường, chỉ cần sử dụng một biến khác.

Khi đã đạt được thông tin đăng nhập theo cách này, máy chủ vẫn sẽ xác nhận phiên. Đây là nơi bạn có thể mã hóa kỳ vọng cho các hệ thống bị đánh cắp hoặc bị xâm phạm; Các mẫu và kết quả dự kiến ​​khác của đăng nhập vào dữ liệu phiên thường có thể dẫn đến kết luận rằng một hệ thống đã bị tấn công hoặc cookie được rèn để có quyền truy cập. Đây là nơi mà công nghệ ISS của bạn có thể đặt các quy tắc sẽ kích hoạt khóa tài khoản hoặc tự động hủy bỏ người dùng khỏi hệ thống ký hiệu tự động, giữ cho kẻ tấn công đủ lâu để người dùng xác định cách kẻ tấn công thành công và cách cắt chúng.

Như một lưu ý kết thúc, hãy chắc chắn rằng mọi nỗ lực khôi phục, thay đổi mật khẩu hoặc lỗi đăng nhập qua ngưỡng dẫn đến việc ký hiệu tự động bị vô hiệu hóa cho đến khi người dùng xác thực đúng và thừa nhận điều này đã xảy ra.

Tôi xin lỗi nếu có ai mong đợi mã sẽ được đưa ra trong câu trả lời của tôi, điều đó sẽ không xảy ra ở đây. Tôi sẽ nói rằng tôi sử dụng PHP, JQuery và Ajax để chạy các trang web của mình và tôi không bao giờ sử dụng Windows như một máy chủ ... bao giờ.

Làm cách nào để kích hoạt giữ tôi đăng nhập?

6. Điều hướng đến bất kỳ trang web nào mà bạn muốn đăng nhập. Nhập tên người dùng và mật khẩu của bạn như bình thường, sau đó chọn tùy chọn hộp kiểm được cung cấp để đăng nhập. hoặc từ ngữ khác cho hiệu ứng chọn nó sẽ cho phép bạn đăng nhập.Navigate to any site that you want to remain signed in to. Enter your username and password as usual, and then select the provided checkbox option to stay signed in. It will be labeled with "Remember me," "Stay signed in" or other wording to the effect that selecting it will allow you to stay signed in.

Mục đích của việc giữ tôi đã đăng nhập là gì?

Khi bạn truy cập hầu hết các trang web, thông thường để xem một hộp được dán nhãn, hãy cho tôi đăng nhập, nhớ tôi hoặc tương tự bên cạnh các trường người dùng và mật khẩu.Nếu bạn kiểm tra hộp này trước khi đăng nhập, bạn sẽ không phải đăng nhập vào trang web vào lần tới khi bạn quay lại, ngay cả khi bạn đóng trình duyệt và quay lại sau.you won't have to sign back into the website next time you return, even if you close your browser and come back later.

Làm thế nào để tôi tiếp tục đăng nhập vào trình duyệt của tôi?

Trình duyệt sẽ giữ cho bạn đăng nhập bằng cách sử dụng một số loại lưu trữ trình duyệt.(Ví dụ: cookie hoặc địa phương hoặc ...).Dữ liệu này được gọi là dữ liệu phiên.Các trang HTML không trạng thái, điều đó có nghĩa là khi bạn làm mới một trang, tất cả dữ liệu đến từ máy chủ trước đó, bị xóa và phải được yêu cầu lại.by using some sort of browser storage. (for example cookies or localStorage or...). This data is called session data. Html pages are stateless, that means when you refresh a page, all data that came from the server previously, are removed, and have to be requested again.

Làm cách nào để thêm nhớ tôi vào trang đăng nhập của tôi?

Chọn hộp kiểm sẽ khiến hộp kiểm "Ghi nhớ tôi" ban đầu được chọn cho người dùng khi họ truy cập trang đăng nhập.Không chọn hộp kiểm sẽ khiến hộp kiểm "Hãy nhớ đến tôi" đó không được chọn khi người dùng lần đầu tiên nhấn trang đăng nhập cho trường hợp đó.. Unselecting the checkbox will cause that same "Remember me" checkbox to not be selected when a user first acceses the login page for that instance.

Chủ đề