Web开发中如何在客户端安全地store/get用户信息?

How do I securely store/get user information on the client side in web development?

在过去的几个月里,我在基于 Web 的应用程序方面取得了良好的进展,但是我意识到我在客户端和服务器之间传递信息的方式中存在一些漏洞。我使用 Angular JS 和 PHP 作为我的主要框架。

登录后,我将用户数据(例如用户名、ID 和关联的帐户名)存储在一个本地存储项目下,然后我在整个应用程序中引用该项目以发出不同的数据库请求。这也允许之前登录过的用户在重新访问我的网站时保持登录状态。

好吧,任何人都可以克隆本地存储变量,对其进行修改,然后将其重新保存在浏览器中。这将允许拥有正确信息的人在访问我的网站时冒充另一个用户。在其他 php POST 请求中,我 return 整个用户列表及其数据库 ID 和用户名,因此知道在哪里查看的人可以访问该信息。幸好我没有存储任何有价值的用户信息,但这似乎不是什么好做法。

所以也许这个问题真的有两个部分:

  1. 如何以不可篡改的方式保存客户信息?我是否应该在根应用程序级别附近创建 public 变量,以便可以通过我的站点访问?

  2. 有没有办法隐藏我的 POST 回复中的信息,使开发工具无法查看它们?任何人都可以看到带有数据库 ID 的用户列表似乎不对,但是当用户相互交互时我需要这些信息。我目前的 goto 方法是使用 php 函数“echo json_encode()”,它可以在纯文本中看到。

非常感谢任何建议。这是我的第一个全功能个人项目,所以有些事情我还不知道。

How can I save the client's information in a way that is unable to be tampered with?

在服务器上加密。切勿将解密密钥提供给客户端。这就是 JWT 的工作原理。

显然,如果您需要内容在客户端可用,这将不起作用。

Is there a way to hide the information in my POST responses so they cannot be viewed by dev tools?

没有


It doesn't seem right that anyone can see the list of users with their database ID, but I need that information for when users interact with each other.

如果您需要告诉用户其他用户的存在,那么他们必须知道这些用户。

数据库 ID 不应是关键信息。

如果你想阻止一个用户冒充另一个用户,那么使用身份验证。需要用户名 + 密码或代表它们的东西(如 JWT)。