在 Flask 会话中存储用户 ID 是否安全?

3

我在网上找到了很多文章解释Flask会话是安全的,但并不是加密的。

这意味着用户可以对cookie进行Base64解码并读取其中的值。

如果我的应用程序使用此会话cookie中的用户ID值来验证用户成功登录后的身份,这是否会有问题?

如果我理解正确,用户将无法更改其cookie值以成为另一个用户的ID,因为它由服务器端应用程序私钥签名。这是正确的吗?

如果是这样,那么使用Flask基于cookie的安全会话内容让用户访问应用程序受保护的视图是否存在任何问题?


2
使用基于cookie的会话是可以的,但是为了避免中间人窃取cookie并访问会话,应该使用HTTPS(但这对于任何具有授权访问的Web服务或应用程序都适用)。此外,为了避免某些XSS cookie窃取,cookie应该是HttpOnly的(我认为Flask会自动为会话cookie执行此操作)。 - jdehesa
1
@jdehesa 谢谢!我找到了一篇有趣的关于这个话题的博客:https://blog.miguelgrinberg.com/post/cookie-security-for-flask-applications - tonysepia
所以只是确认一下 - 攻击者没有办法伪造会话数据吗?因为在我的应用程序的情况下,这将使他们能够向API呈现自己作为不同的用户。 - tonysepia
2
如果您的会话cookie已签名,则它们无法被伪造(也就是说,除非您的签名密钥被盗,但到那时您可能会遇到更严重的问题)。这就是cookie签名的全部意义。您还可以加密cookie的内容,以便用户ID本身对最终用户不可见,或者更好的方法是在cookie中根本不使用用户ID,而只使用会话ID(与后端中的用户相关联)。 - jdehesa
1个回答

4

总结评论中给出的答案:

  • Cookie 可以被篡改,但如果启用了 Flask 会话安全性,则这种被篡改的会话将被丢弃,迫使客户端重新登录
  • 在 Cookie 中 Base64 编码的会话数据可以很容易地查看。因此,任何您的客户端不应该看到的内容都不应该包含在其中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接