是通过API(未嵌入HTML)检索CSRF令牌安全/可靠吗?

时间:2014-01-17 07:16:12

标签: javascript api session csrf single-page-application

网络上的大多数帖子都说:

如果你有一个纯JavaScript应用程序(单页应用程序):只需将CSRF令牌放在最初交付的网站上,你就可以了。并在每次重要的会话更改时重置令牌,即登录/注销。

但是对于我们的新应用程序来说,情况有所不同:

为API提供服务的服务器无法与单页应用的HTML进行交互。因此,无法将CSRF令牌放在HTML代码中。

问题是:

  • 保护应用针对CSRF的最佳方法是什么?

  • 通过API交付CSRF令牌是否安全? (因此,JavaScript应用首先会调用GET http://.../csrfToken 1。为当前用户创建会话(如果没有会话)和 2。关联新会话该会话的CSRF令牌和 3。将该令牌传递给客户端)

  • 如果通过API提供是安全的,是应该将它放在HTTP标头中还是应该使用响应主体并使用JSON?或者在安全方面不重要吗?

  • 浏览器是否应该使用每个(也是GET,HEAD,OPTIONS)请求发送令牌?

  • 浏览器是否应该在HTTP标头内或请求主体内发送令牌?或者在安全方面不重要吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

实际上,即使您正在开发单页应用,也可以交换csrf令牌。您必须为ajax请求添加"withCredentials:true"选项,并且根据请求,您应该在服务器中创建新的csrf令牌。浏览器将进行CSRF令牌的交换。至少我是如何在我的单页应用程序中使用Angular& Django的。

通过API提供CSRF令牌也是不安全的。如果可以通过API访问CSRF令牌,则可以从任何地方访问它,任何获得CSRF令牌的人都可能滥用您的系统。