CSRF Token验证时,表单提交的Token和Cookie里的不一致怎么办?
我在用CSRF Token防护登录表单,后端每次响应头都带了Set-Cookie: csrfToken=xxx,前端用JavaScript读取cookie里的值,然后塞到表单的隐藏字段里:
document.querySelector('#loginForm').addEventListener('submit', function() {
const csrfCookie = document.cookie.replace(/(?:(?:^|.*;s*)csrfTokens*=s*([^;]*).*$)|^.*$/, "$1");
this.querySelector('input[name="_token"]').value = csrfCookie;
});
但提交后后端验证总是失败,发现请求头里的Cookie和表单里的_token值不一样。难道是cookie读取方式有问题?或者需要每次请求都动态更新?
提交时用:
这样能确保你读到的Token和后端生成的一模一样。