假设前端域名为 a.com 后端域名为 b.com 并且使用 Django REST Framework.
Django 官方文档中给出的 ajax 请求通过 CSRF 验证的一种方法是:Django 会在返回的 cookie 中加上一个 csrftoken cookie,前端可以通过 js 读取这一 cookie 并在发起请求时设置一个额外头部 X-CSRFToken,其值为 csrftoken cookie 的值。
这种方法在前后端域名相同的情况下能生效,但如果前后端域名不同,则这种方法就失效了。
这种方法依赖于 cookie 读取的同源性,但在前后端域名不同的情况下,本质上前端发起的请求也是跨域请求,只是是合法的跨域请求罢了,但目前很多防御 CSRF 的方法所依赖的都是 cookie 同源性,在此种情况下根本上就无效了。
那么在前后端域名不同的情况下应当如何区分合法的请求与非法的请求呢?(都是跨域请求)非常感谢!