csrf攻击的cookie问题?
csrf攻击中攻击者能不能拿到被攻击方的cookie?如果拿不到它是怎么攻击的/攻击机制是什么?求各位解答!
csrf 攻击方可以拿到 cookie 的,cookie 的发送机制是浏览器自动的,建议你了解下基本原理,攻击者伪造请求的请求会发送这个 cookie,但是这个请求没法伪造 header,所以常见的防御手段就是前端每次发送请求时在 header 带上这个cookie值,后端检查到 header 中的值是否和 cookie 中的值一致,判断是否为合法请求,举个 spring security 的例子:
由于 csrf 攻击方无法伪造第2步(需要具体 js 执行),所以能够识别csrf攻击,进行拦截。
一般常见的请求库都给你做好这块了,自动发送保护 header,比如 axios,只要设置:
// axios.defaults.xsrfCookieName = 'XSRF-TOKEN';
// axios.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';
axios.defaults.withCredentials = true;
就可以了,后端同步配置上就可以(axios 默认的 cookieName 和 headerName 就是上述的 key,可以用默认的就行)