站点用户可以更改cookie或会话数据吗?


Can site users change cookie or session data?

在我的一些帖子中,当我将用户信息存储在cookie中时,所有的评论和回答都说了类似这样的话,"…问题的答案是……但不要使用cookie来存储用户信息。它是不安全的。"

在我的一个测试网站中,我存储了一个名为"user"的cookie,其中包含登录用户的用户名,以及一个会话变量。我知道这可能是个人信息,但网页上写的是用户名,这有什么关系吗?

如果黑客可以进入我的网站,改变"用户"cookie和会话的值,并在没有用户名的情况下登录某人的帐户,那就很重要了。

这可能吗?如果有,怎么做?

此外,如果我需要更新我的安全,我怎么能有一个选项"保持登录"没有cookie?

谢谢你的帮助

是的,cookie存储在客户端,可以修改

那么如何防止入侵者修改数据呢?我想为此引入两种机制:

存储在会话中,使用Cookie访问

因为Http是一个无状态协议,服务器将保存一个cookie通常名称session_id和客户端将发送它与每个请求。通过这种机制,服务器可以找出哪个用户正在请求。

服务器可以将用户数据存储在所谓的会话变量中,并且可以访问它们,只有在服务器和客户端不能修改它们。

的例子:

在服务器的会话存储(磁盘,数据库或ram):

27: ["username" => "foo"]
35: ["username" => "bar"]
95: ["username" => "fuzz"]

在每个客户端的cookie上:

客户1:

"session_id" : 27
客户2:

"session_id" : 35
客户3:

"session_id" : 95

这个方法有一个向下:

每个数据都需要存储在服务器上,这会消耗服务器的空间。

存储在Cookie中,使用Key

访问

另一种方法是将数据存储在用户cookie中,但是在存储它们之前,密钥加密

由于它们是加密的,并且客户端没有访问密钥,因此入侵者无法对数据进行任何有效的更改。

在这种方法中,您只需要在服务器上存储加密密钥

不占用服务器空间(磁盘或内存)

向下:因为每个http请求都从客户端发送数据。占用服务器的带宽

例如:Laravel Framework的Cookie是加密的