restful跨域情况下客户端首次请求如何获取csrf token?

发布于 2022-09-07 08:38:25 字数 778 浏览 27 评论 0

根据eggjs的官方文档:

在 CSRF 默认配置下,token 会被设置在 Cookie 中,在 AJAX 请求的时候,可以从 Cookie 中取到 token,放置到 query、body 或者 header 中发送给服务端。

In jQuery:

var csrftoken = Cookies.get('csrfToken');

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
  beforeSend: function(xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader('x-csrf-token', csrftoken);
    }
  },
});

restful并且跨域的情况下,请求的页面文件并不会经过eggjs服务器,因此也不会在cookie中种上csrf token,当首次请求为post(例如登陆),此时客户端cookie中还没有csrf token因此请求肯定会失败,再次发起请求后才能读取到cookie中的csrf token,怎么解决这个问题?

补充:基于token验证的restful是不是没有csrf风险了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅冕 2022-09-14 08:38:25

csrf token 只能由服务器端返回,通过csrf 白名单吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文