首页 文章

从服务器到AngularJS客户端的CSRF令牌交换

提问于
浏览
0

我疯狂地想弄清楚如何为我的Web应用程序实现CSRF保护 . 我已经阅读了大量的页面,但仍无法在我的特定环境中决定解决方案 .

所以,首先我的Web应用程序是用Angular编写的,静态部署在Apache服务器上 . 它调用我的服务器上的一些服务,Java类型,部署在应用程序服务器上的战争中 . 它们都部署在同一个域中 . 验证后,在响应中设置通常的会话cookie(安全HttpOnly) .

现在,我想基于同步器令牌或双提交cookie模式实现CSRF保护(但从我看到的第一个是更好的解决方案,因为我可以处理服务器端的状态) .

我看到的大多数解决方案都建议生成令牌服务器端并将其存储在cookie中,以便可以在客户端访问它 . 对此工作的约束,我认为它是一个很大的问题,因为Javascript无法访问它,因此cookie不能很好 . 此外,我觉得在非完全受保护的cookie中共享令牌不是一个好主意 . 但它似乎是AngularJS的推荐解决方案......

那么,如果我放弃这个解决方案,我还剩下什么?将令牌放在cookie中而不是放在响应头中?它安全吗?公开服务以获取令牌?看似实用但不确定这是不是一个好主意?公开一个servlet来构建一个Javascript以提供令牌,就像在OWASP Guard中一样?还要别的吗?

编辑:似乎Spring将在HTTP响应中注入令牌名称和值作为解决方案 .

谢谢你的帮助!

1 回答

  • 0

    每个用户会话应生成一次

    • CSRF令牌 .

    • 它应该存储在服务器端会话中(如果是Java,则为HttpSession)

    • 客户端应将令牌存储为隐藏参数,而不是存储在浏览器的cookie中 .

    • 服务器应验证每个请求是否存在CSRF令牌,并与会话中存储的令牌进行比较 .

    更多细节:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

相关问题