我读到play框架通过用应用程序密钥散列会话id来解决会话固定问题,但它是否提供了任何机制来防止会话劫持,还是这取决于实现者?
play文档中有一个很好的安全部分,所以这里有一个链接-http://www.playframework.org/documentation/1.2.4/security.
它涵盖
- XSS
- SQL注入
- 会话安全性
- 跨站点请求伪造
有些你必须自己实施,有些你不需要。
您关于会话劫持的具体问题是自动提出的。
会话是密钥/值的散列,已签名但未加密。那个意味着只要你的秘密是安全的第三方伪造会话。
不,一旦能够捕获会话cookie(通过中间的嗅探/man),就没有内置的方法来防止会话被劫持。有一些方法可以让变得更难,例如:
- 仅使用https
- 正在application.conf中设置application.session.httpOnly
让事情变得更难的一种方法是:-将ip/用户代理/解析/其他内容或其哈希也存储在会话中。。然后在控制器中检查访问您网站的用户是否仍在重新创建相同的哈希。。。唯一真正的问题是使用代理的人,例如因为集群而动态更改ip。
您可以尝试使用的一个小技巧:(仅适用于最近的浏览器)当用户登录时,将一些内容存储在HTML5本地存储中。修改Ajax调用以从本地存储提供这些信息。如果信息丢失/无效,则可以使整个会话无效。但你必须确保,这些检查只适用于来自HTML5浏览器的请求。
希望这能有所帮助。