我疯狂地试图弄清楚如何为我的Web应用程序实现CSRF保护。我已经阅读了大量的页面,但仍然无法在我的特定环境中决定解决方案。
所以,首先我的Web应用程序是用Angular编写的,静态部署在Apache服务器上。它调用我的服务器上的一些服务,Java类型,部署在应用程序服务器上的战争中。它们都部署在同一个域中。验证后,在响应中设置通常的会话cookie(secure + HttpOnly)。
现在,我想基于同步器令牌或双提交cookie模式实现CSRF保护(但从我看到的第一个是更好的解决方案,因为我可以处理服务器端的状态)。
我看到的大多数解决方案都建议生成令牌服务器端并将其存储在cookie中,以便可以在客户端访问它。对此工作的约束,我认为它是一个很大的问题,因为Javascript无法访问它,因此cookie不能很好。此外,我觉得在非完全受保护的cookie中共享令牌不是一个好主意。但它似乎是AngularJS推荐的解决方案......
所以,如果我放弃这个解决方案,我还剩下什么? 将令牌放在cookie中而不是放在响应头中?它安全吗? 公开服务以获取令牌?看似实用但不确定这是不是一个好主意? 公开一个servlet来构建一个Javascript以提供令牌,就像在OWASP Guard中一样? 还有什么吗?
编辑:看来Spring会在HTTP响应中注入令牌名称和值作为解决方案。
感谢您的帮助!
答案 0 :(得分:0)
更多详情:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet