【发布时间】:2018-09-19 01:40:26
【问题描述】:
我正在学习 Angular 和 Express,我正在尝试实现登录。
据我了解,最好将 JWT 存储在带有“secure: true”和“httpOnly: true”的 Cookie 中:
const jwtBearerToken = jwt.sign(...);
res.cookie("SESSIONID", jwtBearerToken, {httpOnly:true, secure:true});
这样没有JavaScrip可以访问Cookie(因为“httpOnly: true”),
而且我受到 XSS 的保护,
但我的 SPA 也无法以这种方式访问 JWT,我的问题来了:
如何保护我免受 CSRF/XSRF 的影响?
我的想法是这个:
在cookie中放入一个名为“cookie_id”的字段
还在“res”标头中发送将包含相同字段“cookie_id”的 JWT
将 JWT 存储在 LocalStorge 中
定义一个 HttpInterceptor Mehtod,为每个“req”在 HttpHeader 中附加“cookie_id”
服务器端检查cookie中的“cookie_id”是否与HttpHeader中的“cookie_id”一致
这是处理这个问题的正确方法吗?
【问题讨论】:
-
只是为了好奇您的浏览器是否可以发送 cookie 为什么需要 SPA 来访问 cookie?
-
因为我需要阅读“cookie_id”字段,这里的重点是我需要了解我的 SPA 中的用户是否自愿提出请求
-
请注意,仅仅因为攻击者无法通过注入的 javascript 获取您的会话 cookie,您就不会受到 xss 的保护。
标签: angular security cookies jwt csrf