这可以成为捍卫 csrf 的策略吗? (双重提交cookie)
Can this be a strategy to defend csrf? (double submit cookie)
使用的框架:nuxt.js + spring boot(api)
- 调用一次api生成随机值并在首次访问页面时设置httpOnly cookie(例如key=csrfToken)。
- api 响应也存储在 vuex 中。
(响应也有标记 body。和 Set-Cookie header。)
- 当使用axios请求时,如果有"csrfToken" cookie,在请求中添加自定义header(例如key=CSRF_TOKEN_HEADER)。
- 在服务器中,如果传递了 csrfToken cookie,请查找自定义 header 值以比较它们是否相同。
我知道 $store 本身并不安全。但是,我认为 CSRF 是可以防御的,因为无法从外部站点访问 $store。
如果我有什么问题请告诉我。
When request using axios, If there is the "csrfToken" cookie, add custom header(e.g. key=CSRF_TOKEN_HEADER) to the request.
由于 cookie 是 httpOnly,您无法判断是否存在。
CSRF 攻击的原理是诱骗用户发出他们不打算发出的请求。
执行此操作的传统方法是在攻击网站上创建一个表单,其中 action
发送到被攻击的网站。提交该表单时,请求来自用户的浏览器,并包含目标网站的所有用户 cookie。
对此的防御是要求请求包含攻击站点无法知道的信息。 CSRF 令牌。
由于攻击站点无法从用户的 cookie 或站点的 session 商店(取决于其存储位置)或其他任何地方读取该令牌,因此他们无法将其包含在表单中数据.
但是您没有使用常规表单提交。您正在使用 JavaScript 发出请求。
这带有 built-in 防御:The Same Origin Policy and Preflight Requests。
您需要做的就是强制对请求进行预检(例如,通过将 Content-Type
请求 header 设置为 application/json
并在 body).
这将强制攻击站点发出预检请求。您的服务器不会将攻击者列入白名单。因此浏览器永远不会发起攻击请求。
如果攻击者试图发出 non-preflighted 请求,它不会有 JSON 负载,因此您的服务器可以拒绝它,因为格式错误。
使用的框架:nuxt.js + spring boot(api)
- 调用一次api生成随机值并在首次访问页面时设置httpOnly cookie(例如key=csrfToken)。
- api 响应也存储在 vuex 中。 (响应也有标记 body。和 Set-Cookie header。)
- 当使用axios请求时,如果有"csrfToken" cookie,在请求中添加自定义header(例如key=CSRF_TOKEN_HEADER)。
- 在服务器中,如果传递了 csrfToken cookie,请查找自定义 header 值以比较它们是否相同。
我知道 $store 本身并不安全。但是,我认为 CSRF 是可以防御的,因为无法从外部站点访问 $store。
如果我有什么问题请告诉我。
When request using axios, If there is the "csrfToken" cookie, add custom header(e.g. key=CSRF_TOKEN_HEADER) to the request.
由于 cookie 是 httpOnly,您无法判断是否存在。
CSRF 攻击的原理是诱骗用户发出他们不打算发出的请求。
执行此操作的传统方法是在攻击网站上创建一个表单,其中 action
发送到被攻击的网站。提交该表单时,请求来自用户的浏览器,并包含目标网站的所有用户 cookie。
对此的防御是要求请求包含攻击站点无法知道的信息。 CSRF 令牌。
由于攻击站点无法从用户的 cookie 或站点的 session 商店(取决于其存储位置)或其他任何地方读取该令牌,因此他们无法将其包含在表单中数据.
但是您没有使用常规表单提交。您正在使用 JavaScript 发出请求。
这带有 built-in 防御:The Same Origin Policy and Preflight Requests。
您需要做的就是强制对请求进行预检(例如,通过将 Content-Type
请求 header 设置为 application/json
并在 body).
这将强制攻击站点发出预检请求。您的服务器不会将攻击者列入白名单。因此浏览器永远不会发起攻击请求。
如果攻击者试图发出 non-preflighted 请求,它不会有 JSON 负载,因此您的服务器可以拒绝它,因为格式错误。