如何安全地将用户凭据存储在浏览器中?

信息安全 验证 密码 Web应用程序 javascript 客户端
2021-08-30 01:30:37

我需要帮助来使用用户凭据对用户进行身份验证。

我们使用 Angular 5 作为前端,如果用户选中Remember Me ,则需要存储用户的电子邮件和密码。然后在注销并刷新浏览器后自动填充用户凭据。

存储用户凭据的方法有多种(Cookie、本地存储、会话存储、IndexedDB、WebSQL)。但这些都不安全。

我们曾考虑通过加密将用户凭据存储在 localStorage 中,但任何人都可以解密它,所以这种方式并不安全。

我们的目标浏览器包括 Internet Explorer、MS Edge、Safari、Google Chrome、Opera、Mozilla Firefox。

我们如何使用 JavaScript 实现客户端 Web 存储?

2个回答

用户可以看到和/或修改任何存储在客户端(且未加密)的内容。

实现“记住我”功能的常用方法是使用从服务器发送的加密用户名设置 cookie。

服务器将使用只有服务器知道的密钥加密用户名,并使用该值设置一个 cookie。当服务器稍后收到该 cookie 时,它​​可以尝试解密它,如果成功,则将用户登录。这不能被用户篡改,因为他们不知道密钥。

  1. 在您的服务器上创建一个文件夹(例如 example.com/accounts)
  2. 禁用目录列表(如果有的话)
  3. 创建一个能够在服务器上创建新文件的 php 文件
  4. 创建帐户屏幕
  5. 使用 javascript 将当前页面链接到 php

例如:

window.location.replace("create-username.php?action=" + 
document.getElementById("username").value + "&secret=" + 
document.getElementById("password").value)

编辑:防止他人访问信息

.htaccess添加到存储帐户的文件夹中。(php可以访问这个文件夹)

Options -Indexes
Deny from all

现在按照 Chris Murray 的回答来存储数据。