我正在使用 play framework2 设计一个非常安全的登录机制。由于 Play 没有会话的概念并将内容保存在 cookie 中(我喜欢),我想知道我需要考虑哪些安全措施。我们显然将使用 SSL 来传达登录凭据,并且 cookie 将是一些用户信息的加密值,例如他们的电子邮件或用户 ID。是否有人可以嗅探该 cookie 或从另一个用户的 cookie 中获取并重新使用它?我怎样才能使它更安全?
3 回答
事实上,cookie 没有加密。它已签名。此签名来自您的 application.conf 中的 application.secret。
这意味着任何人都可以看到 cookie 的内容(并最终尝试欺骗其他会话或更改他们的登录名/id/令牌...)
从播放文档:
当然,cookie 值使用密钥签名,因此客户端无法修改 cookie 数据(否则将失效)。
我不是安全专家,但是,如果您将应用程序保密,对我来说就足够了。
欢迎大家讨论签名的实力!
好吧,如果您希望它真正安全,您应该通过 SSL 进行一般通信,而不仅仅是登录。否则有人可以获得 Cookie。使用 cookie 解决方案或更好的播放会话的主要问题是您没有会话超时。所以想象一下,如果我能够获得 cookie,我可以永远使用这个用户帐户。所以你需要像会话超时这样的东西。如果来自同一个客户端的请求不止一个,这将变得非常棘手,因为两者都试图更改同一个 cookie。一种解决方法是通过缓存处理会话超时,但请记住,如果您在集群中运行,则需要分布式缓存解决方案。
您可以尝试在我编写的安全解决方案https://launchpad.net/permsec上关注更改。这是我必须做的一个开放的待办事项。
如果存在窃听通信和窃取 cookie 的风险,您可以让攻击者的操作更加困难。例如,在签名的 cookie 中添加计算机的 IP 地址。如果其他人窃取了它,他将不得不使用与受害者相同的 IP 地址。这并非不可能,但它提高了标准。