这是防止跨站点请求伪造(CSRF)攻击的安全方法吗?

时间:2015-05-04 22:05:18

标签: javascript ajax cookies csrf

我们的应用程序就是这样:

  • 每个用户都必须登录
  • 登录页面发回服务器,如果授权用户返回SPA应用程序。
  • SPA应用程序完全是AJAX
  • HTTPS

通常我们会发送一个sessionid Cookie和一个csrftoken Cookie。令牌cookie值将作为x-header包含在任何AJAX帖子中,并在每次请求时在服务器上验证所有内容。

在将SPA页面返回到浏览器之前构建SPA页面时,我们可以嵌入我们喜欢的任何内容。我们希望最终用户能够登录多个标签,而不会影响其他标签。

我们宁愿做什么:

  • 像以前一样将sessionid作为cookie发送,但cookie名称将是随机的。
  • 没有csrftoken,而是将随机cookie名称嵌入到将AJ-header添加到AJAX帖子请求的javascript例程中。
  • 服务器将从x-header获取sessionid。

这使我们有机会允许多次登录,每次登录都有一个唯一的sessionid cookie名称,但每个帖子请求都有一个标准化的x-header名称。

这会像sessionid cookie,csrftoken cookie / x-header方法一样安全吗?

1 个答案:

答案 0 :(得分:3)

是的,添加一个攻击者无法从有效用户的会话中复制的标头是执行此操作的一种方法。

e.g。 X-Requested-With可以添加到每个AJAX请求中(默认情况下JQuery会这样做)并且您只需在服务器端收到请求时检查此标头是否存在。如果没有服务器选择通过CORS,则不能跨域发送此标头。

您可以将其与令牌结合使用 - see my answer here

e.g。

X-Requested-With: XMLHttpRequest;0123456789ABCDEF