单页 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。
我的应用结构如下
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。