小编典典

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

ajax

因此,我们的应用程序是:

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

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

由于SPA页面是在返回浏览器之前构建的,因此我们可以在其中嵌入我们想要的任何内容。我们希望最终用户能够登录多个选项卡,而一个选项卡不影响其他选项卡。

我们宁愿做的是:

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

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

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


阅读 351

收藏
2020-07-26

共1个答案

小编典典

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

例如X-Requested-With可以将其添加到每个AJAX请求中(默认情况下,JQuery会执行此操作),并且在服务器端收到请求时,您只需检查此标头是否存在。如果没有服务器通过CORS选择加入,则无法跨域发送此标头。

例如

X-Requested-With: XMLHttpRequest;0123456789ABCDEF
2020-07-26