假设前端域名为 a.com 后端域名为 b.com 并且使用 Django REST Framework.
Django 官方文档中给出的 ajax 请求通过 CSRF 验证的一种方法是:Django 会在返回的 cookie 中加上一个 csrftoken cookie,前端可以通过 js 读取这一 cookie 并在发起请求时设置一个额外头部 X-CSRFToken,其值为 csrftoken cookie 的值。
这种方法在前后端域名相同的情况下能生效,但如果前后端域名不同,则这种方法就失效了。
这种方法依赖于 cookie 读取的同源性,但在前后端域名不同的情况下,本质上前端发起的请求也是跨域请求,只是是合法的跨域请求罢了,但目前很多防御 CSRF 的方法所依赖的都是 cookie 同源性,在此种情况下根本上就无效了。
那么在前后端域名不同的情况下应当如何区分合法的请求与非法的请求呢?(都是跨域请求)非常感谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.