是什么阻止了HttpSession的id被盗?

时间:2010-11-10 23:35:33

标签: java security servlets java-ee httpsession

在Java Servlet API中,如何确保某人的会话ID不会被盗?

例如,如果我有一个活跃的会话并且有人以某种方式获得我的会话ID,他们可以使用它吗?

3 个答案:

答案 0 :(得分:12)

没有什么能阻止它。您获得会话ID,您可以参加会议。

在通常的cookies情况下,这本身并不存在风险。攻击者不应该能够读取用户的会话cookie,除非:

  1. 他们有中间人的能力,在这种情况下,你遇到的问题比会话ID更糟糕;

  2. 您已经离开了跨站点脚本漏洞,在这种情况下,您遇到的问题比会话ID要严重得多;

  3. 您很容易受到DNS重新绑定/跨域烹饪攻击,在这种情况下,您应该通过仅允许已知良好Host:请求来解决此问题。

  4. (虽然您可以尝试将会话绑定到IP地址,但由于例如循环代理,这可能会破坏有效会话.IP可以用作检测可疑活动的更广泛策略的一部分,但在公共互联网上它不是好的想法总是要求会话中的每个请求来自同一个IP。)

    不幸的是,在Servlet中还有另一种情况,除了cookie:jsessionid=参数。由于它们出现在URL本身,这使得它们很多更加泄密(例如通过引用和粘贴的链接)。这与参数会话ID的唯一实际问题相去甚远。他们搞乱导航和破坏搜索引擎优化。

    在我看来jsessionid=网址是Servlet最糟糕的早期错误之一,过去的一个名誉扫描的Cookie回退策略不应该用于任何事情。但当然不应允许他们授予对任何特权数据的访问权限;如果您需要针对不支持cookie的浏览器的回退机制,请考虑使用HTTP基本身份验证。

    在Servlet 3.0中,您可以使用jsessionid=中的<session-config>轻松停用web.xml个网址。遗憾的是,在以前的版本中,如果要正确禁用该功能,则会使用过滤器。

答案 1 :(得分:8)

是的,他们可以使用它。除非您将所有流量都通过SSL,否则无法保护它。

这就是Firesheep的工作原理,最近因为简化会话窃取而受到了很多关注。

答案 2 :(得分:0)

是的,会话ID允许某人访问相应的会话。

您可以在会话期间存储登录期间使用的IP,并且当IP更改要求用户再次登录时。 此外(不确定是否自动完成)您可以为用户代理执行相同的操作 - 但实际上并没有增加安全性来抵御恶意攻击,只是针对愚蠢的用户如果通过GET而不是cookie传递意外的偶然事件。