3

最近我偶然发现了一些建议使用 cookie 来存储会话数据的文章。我喜欢这个想法并通过添加一个可以正常工作的 CookieStorage 类来扩展我的会话存储(请注意,每个用户我使用唯一的哈希密钥来签名和加密数据)但是,还有很多其他文章建议不要将敏感数据存储在一个 cookie,即使您对值进行了加密和签名。

就个人而言,我没有理由不这样做,尤其是在为每个用户使用不同的密钥加密和签名值时。数据被泄露的风险与正常会话相同,不是吗?更不用说如果您使用 SSL,那么劫持的风险就会被消除。

我认为这种方法的好处是,如果会话数据不大,服务器上用于打开/读取/写入会话数据的 IO 操作更少,无论存储是基于文件、数据库还是基于内存

感谢您对此事的反馈

谢谢

4

2 回答 2

3

如果您使用完全没有服务器端组件的纯 cookie 存储,则用户可以控制数据。唯一阻止他的是你的加密/签名方法;但这可能会受到攻击。如果您没有使用特定于用户会话的加密/签名密钥(即您没有使用服务器端会话),那么您几乎受限于静态密钥。有人可以离线攻击它,试图暴力破解它。一旦他们这样做了,他们就可以欺骗他们的整个会话。

如果您正在使用存储在服务器端会话中的更安全的一次性随机机密......您已经在服务器端会话中存储数据!为什么不保持简单并将所有内容存储在那里?它还将减少在每个请求中来回传输所有 cookie 所需的带宽需求。

如果您这样做主要是为了节省服务器上的 I/O 操作:使用更高效的会话存储,例如基于内存缓存的存储。

于 2013-08-30T07:46:14.893 回答
0
  1. 虽然现在会话 id 仅通过 cookie 传输,但最初还有其他方式,它们仍然受支持并且可以使用。
  2. 有时服务器需要知道或更改会话信息。
  3. @CBroe 关于 cookie 大小的那一点。
于 2013-08-30T08:59:57.507 回答