但是如果使用的是Ajax等异步post时,则可将其放到js代码可以访问到令牌值的地方即可.
这种情况下,将csrf-token写在head的meta里是一种比较好的实现方式。
html Meta标签代码如下:
<meta name="csrf-token" content="xxx">
如果使用的是jQuery,可以直接全局初始化
可以将csrf令牌放置到header请求头中:
[复制到剪贴板] |
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
当然,这也要求你使用的框架或者系统在检测 csrf token时需要检测http头的值
例如 CodeIgniter4 是按下面顺序检查 csrf token 值:
- $_POST 数组
- HTTP 头
- php://input (JSON 请求) - 这种方法是最慢的,因为我们必须解码 JSON 然后重新编码它
- php://input (原始 body) - 适用于 PUT、PATCH 和 DELETE 类型的请求