我的申请结构如下
1)在api.mydomain.com中运行的API服务器
2)在www.mydomain.com上运行前端VUejs应用程序
所以我通过httponly cookie实现了身份验证。
但很少与CSRF令牌实现相混淆
Mysolution
1)。CSRF
来自网址的令牌/getCSRF
。
2)将其存储在localstorage中。
3)随每个请求发送。
但我不认为有人提出建议的好方法吗?
答案 0 :(得分:2)
第一件事:随意结合使用基于会话的身份验证和 httpOnly(防止您的会话 cookie 通过 XSS 攻击被劫持)cookie。这没什么不对的。
在某个动作(例如登录)之后,生成 CSRF 令牌并将其存储在 cookie 中(使其可被 JavaScript 访问)。您可以使用服务器机密对令牌进行 HMAC,以便攻击者无法重新创建 CSRF。
确保 CSRF 将在每个请求中作为 cookie 发送,但诀窍是发送它并期望它在自定义标头中(例如 X-CSRF-HEADER
)。最后一步是检查其有效性。
关键思想是攻击者在执行 CSRF 攻击时无法附加自定义标头。