单页 Web 应用程序中的 CSRF 保护

CSRF protection in singlepage web application

我的应用结构如下

1)API 服务器 运行 在 api.mydomain.com

2) www.mydomain.com

中的前端 VUejs 应用程序 运行

所以我通过 httponly cookie 实现了身份验证。

但很少与 CSRF 令牌实现混淆

我的解决方案

1).CSRF 来自 url 的令牌,例如 /getCSRF.

2) 存放在localstorage中。

3) 随每个请求一起发送。

但我认为这不是一个好方法,有人有建议吗?

首先要做的事情是:随意将 session-based 身份验证与 httpOnly(防止您的 session cookie 被 XSS 攻击劫持)cookie 结合使用。没有错。

在执行特定操作(例如登录)后,生成一个 CSRF 令牌并将其存储在 cookie 中(使其可供 JavaScript 访问)。您可以使用服务器机密对令牌进行 HMAC,这样攻击者就无法重新创建 CSRF。

确保 CSRF 将在每个请求中作为 cookie 发送,但诀窍是发送它并在自定义 header(例如 X-CSRF-HEADER)中期待它。最后一步是检查其有效性。

关键思想是攻击者在执行 CSRF 攻击时无法附加自定义 header。