cookie信息是否存储在服务器端?

信息安全 http 饼干
2021-09-05 18:33:27

我认为 cookie 仅作为文件存储在客户端。然后我意识到如果cookie没有存储在服务器端,服务器如何将刚刚从客户端接收到的cookie与过去创建的某个会话或其他信息相匹配?

那么cookie信息也存储在服务器端是否正确?

服务器如何存储 cookie 信息?

我搜索了“客户端 cookie”和“服务器端 cookie”并达成了几个讨论,包括

谢谢。

1个回答

这是一个很好的安全问题。必须了解他们所使用的机制,以确保他们正在构建安全的软件。

安全

当服务器可以访问 cookie 信息时,不会增加重大的安全风险。服务器已经是一个需要强力保护的特权系统。

[评论] ... [a] 服务器如何识别新请求与以前的一些请求来自同一用户,而不记住来自某个用户的以前的请求...?

如果服务器将加密或签名数据存储在客户端 cookie 中,则服务器可以验证这一点。它可以推断只有经过授权的服务器才能存储该 cookie。

一个很好的现代例子是 JWT - https://jwt.io/它们可以在 cookie 中发送,但通常它们会进入 Web API HTTP 请求的授权标头。如果您对 JWT 了解得更多,则可以了解可以使用更简单的机制部署的加密原理,用于 cookie 中的少量数据。

知识

服务器如何将刚刚从客户端接收到的 cookie 与过去创建的某个会话或其他信息相匹配?

Cookie 存储在客户端的浏览器中,并在超时后被删除。在对服务器的每个 HTTP 请求时,它们都会自动发送到服务器。cookie 通常由服务器设置,而不是客户端设置(但这是可能的)。

服务器通常使用直接值,或者本地数据库查找解密一个值例如,用户 ID 值可以存储在加密的 cookie 中。

使用 cookie 的一个关键架构原因是维护与用户身份相关联的会话。它们也被用作一种分布式数据存储,因此服务器已经在 HTTP 请求时获得了这些信息,而无需在会导致延迟的磁盘/数据库上查找它。

会话可能与 Web 服务器内存中的键 (GUID) 相关联,也可能是数据库中新会话记录的键。在这两种情况下,密钥都是由 cookie 中继的。

服务器如何存储 cookie 信息?

服务器可以存储它们,但这不是人们从概念上看待它们的方式。在某种程度上,服务器确实存储了数据——会话键是记录的主键(数据库或散列字典查找)。对于加密的 UserID,服务器端也有他们的密钥。在某种程度上,客户端并没有“存储”它,它更像是一个密钥的副本。但是有可能并且很可能会发生,客户端存储未在服务器端持久保存的不同信息。

服务器是否总是有 cookie 信息的记录?

否。以下是一些服务器没有 cookie 信息记录的情况:

  • 客户端的 Javascript 设置一个 cookie。例如。“OrganisationID=10”表示用户已在所有浏览器选项卡中更改了组织上下文。
  • 服务器加密一些数据供用户保存。例如。"Roles=Admin,Developer,Staff" 以便服务器可以在函数上强制执行角色,而无需在数据库上进行查找

虽然服务器端并不总是在它通常拥有的地方拥有该信息,因为 cookie 用于上下文。当有一个 HTTP 请求时,服务器需要知道它来自谁,他们被授权使用什么角色,以及他们之前是否见过。