窃取会话ID cookie - 反措施

时间:2011-01-24 15:10:44

标签: javascript security session-hijacking

使用其他用户在受信任站点中种植的javascript函数很容易窃取会话ID cookie。这种攻击有哪些可能的对策?

拒绝客户端的所有javascript脚本可能很困难,因为几乎所有站点都使用js。服务器端有哪些可能的对策?是否可以在会话ID值中包含客户端ip-address的哈希值,以防止从其他主机使用有效的会话ID?这种方法有意义吗?

在您的宝贵答案中提到的其中一个资源中,提出了一种解决方案,其中会话ID在每次请求后更改。 app服务器/框架是否已经支持这样的功能?特别是Django / python怎么样?

5 个答案:

答案 0 :(得分:4)

将IP映射到会话映射真的很尴尬,因为您没有保证人们不使用代理,这些代理可以轻松更改IP。

您可以做的最好的事情是使用SSL,并制作您的Cookie HTTP-only

答案 1 :(得分:2)

您需要指定某些Cookie适用于某些主机,域,子域或其他任何内容。 Cookies支持。

我认为您无法访问其他域名的Cookie。

答案 2 :(得分:1)

  

是否可以包含哈希值   会话中的客户端ip-address   id值可以防止有效   会话ID是否可以从其他主机使用?   这种方法有意义吗?

这可以在某些情况下阻止会话劫持,但是在攻击者计算机和受害者计算机位于同一网络的情况下,由于连接来自同一IP地址,因此不会执行任何操作。

  

服务器端有哪些可能的对策?

如果某人连接到公共网络,使用SSL将有助于防止会话劫持。

您可以查看代码并确保代码中没有XSS缺陷。

您还可以确保用于存储会话的Cookie具有HTTP Only标记。

答案 3 :(得分:1)

  • 只安装您信任的javascript。如果您不确定代码,请检查源代码(可能使用某种XSS扫描程序)。
  • 使用例如这个简单的javascript代码段来过滤您的javascript(来自输入):

    功能清理(html){
        `return String(html)
        .replace(/&(?!\ w +;)/ g,'&')
        。更换(/     .replace(/> / g,'>')
        .replace(/“/ g,'”');
    }

必须也有很好的过滤(输入)服务器端。例如,PHP有filter extension

答案 4 :(得分:1)

这称为XSS。最好的解决方案是防止首先在客户端上种植JavaScript代码。

一个有趣的解决方案是为每个用户操作提供基于令牌的身份验证。查看OWASP CSRF page了解更多信息。

编辑:正如评论所说,令牌无助于缓解会话劫持问题。正如维基百科关于Session Hijacking的文章所述,the best solution是每次页面重新加载时都可以旋转会话ID。