网络上的大多数帖子都说:
如果你有一个纯JavaScript应用程序(单页应用程序):只需将CSRF令牌放在最初交付的网站上,你就可以了。并在每次重要的会话更改时重置令牌,即登录/注销。
但是对于我们的新应用程序来说,情况有所不同:
为API提供服务的服务器无法与单页应用的HTML进行交互。因此,无法将CSRF令牌放在HTML代码中。
问题是:
保护应用针对CSRF的最佳方法是什么?
通过API交付CSRF令牌是否安全? (因此,JavaScript应用首先会调用GET http://.../csrfToken
1。为当前用户创建会话(如果没有会话)和 2。关联新会话该会话的CSRF令牌和 3。将该令牌传递给客户端)
如果通过API提供是安全的,是应该将它放在HTTP标头中还是应该使用响应主体并使用JSON?或者在安全方面不重要吗?
浏览器是否应该使用每个(也是GET,HEAD,OPTIONS)请求发送令牌?
浏览器是否应该在HTTP标头内或请求主体内发送令牌?或者在安全方面不重要吗?
提前谢谢!
答案 0 :(得分:0)
实际上,即使您正在开发单页应用,也可以交换csrf令牌。您必须为ajax请求添加"withCredentials:true"
选项,并且根据请求,您应该在服务器中创建新的csrf令牌。浏览器将进行CSRF令牌的交换。至少我是如何在我的单页应用程序中使用Angular& Django的。
通过API提供CSRF令牌也是不安全的。如果可以通过API访问CSRF令牌,则可以从任何地方访问它,任何获得CSRF令牌的人都可能滥用您的系统。