4

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

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

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

4

5 回答 5

4

做 IP 到会话的映射真的很尴尬,因为你不能保证人们没有使用代理,而这些代理很容易改变 IP。

您可以做的最好的事情是使用 SSL,并使您的 cookie仅 HTTP

于 2011-01-24T15:19:36.850 回答
2

您想指定某个 cookie 用于某个主机、域、子域或其他任何内容。Cookie 支持这一点。

我不认为您可以从其他域访问 cookie。

于 2011-01-24T15:18:23.903 回答
1

是否可以在会话 ID 值中包含客户端 IP 地址的哈希值,以防止从另一个主机使用有效的会话 ID?这种方法有意义吗?

这可以在某些情况下阻止会话劫持,但在攻击者计算机和受害计算机位于同一网络上的情况下,它不会做任何事情,因为连接来自同一个 IP 地址。

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

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

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

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

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

    function sanitize(html){
    `return String(html)
    .replace(/&(?!\w+;)/g, '&')
    .replace(/ .replace(/>/g, '>')
    .replace( //g, '"');
    }

您还必须有良好的过滤(输入)服务器端。例如 PHP 有过滤器扩展

于 2011-01-24T15:25:30.843 回答
1

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

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

编辑:正如评论所说,令牌无助于缓解会话劫持问题。正如维基百科关于Session Hijacking的文章所说,最好的解决方案是轮换 Session ID,每次重新加载页面时都可能。

于 2011-01-24T15:25:52.287 回答