Javascript angularjs如何处理csrf?

Javascript angularjs如何处理csrf?,javascript,angularjs,security,csrf,Javascript,Angularjs,Security,Csrf,我在理解以下代码时有点困难 run.$inject = ['$http']; function run($http) { $http.defaults.xsrfHeaderName = 'X-CSRFToken'; $http.defaults.xsrfCookieName = 'csrftoken'; } 正如我一直认为的那样,csrf被注入html表单或ajax调用,而不是cookie,因为csrf是一种保护,可以防止任何试图使用cookie进行身份验证的对手 有人能详细解释an

我在理解以下代码时有点困难

run.$inject = ['$http'];

function run($http) {
  $http.defaults.xsrfHeaderName = 'X-CSRFToken';
  $http.defaults.xsrfCookieName = 'csrftoken';
}
正如我一直认为的那样,csrf被注入html表单或ajax调用,而不是cookie,因为csrf是一种保护,可以防止任何试图使用cookie进行身份验证的对手


有人能详细解释angular是如何处理csrf的,以及它是如何从后端获取令牌的吗?

我不能比angular自己更好地回答这个问题,所以我只引用:

跨站点请求伪造(XSRF)保护

XSRF是一种未经授权的站点可以获取用户私有数据的技术。 Angular提供了一种对抗XSRF的机制。执行XHR时 请求时,$http服务从cookie中读取令牌(默认情况下, XSRF-TOKEN),并将其设置为HTTP头(X-XSRF-TOKEN)。只因为 在您的域上运行的JavaScript可以读取cookie,即您的服务器 可以肯定的是,XHR来自于在您的计算机上运行的JavaScript 域名。不会为跨域请求设置标头

要利用这一点,服务器需要在 JavaScript可读会话cookie,称为第一个HTTP上的XSRF-TOKEN 获取请求。在后续的XHR请求中,服务器可以验证 cookie与X-XSRF-TOKEN HTTP头匹配,因此请确保 只有在您的域上运行的JavaScript才能发送请求。 令牌对于每个用户都必须是唯一的,并且必须可由 服务器(防止JavaScript生成自己的令牌)。我们 建议令牌是站点身份验证的摘要 为了增加安全性,饼干中加入了盐

可以使用xsrfHeaderName和 $httpProvider.defaults的xsrfCookieName属性位于 配置时间,$http.defaults在运行时,或每请求配置 反对

$http.defaults.xsrfCookieName
只允许您指定cookie的名称,否则它将查找默认的
XSRF-TOKEN


在服务器端实现方面,我建议使用一些node.js中间件来处理初始cookie的设置,而不是自己滚动。请特别关注它,因为它似乎是最受欢迎的。您也可以尝试senchalab的中间件。这两个都应该足够让你开始了。

我相信你上面的代码应该在
config
块中,而不是
run
块中。我不确定,但我发现这里面的代码没问题,但应该在config块中。而不是run块对不起,如果这是一个noob问题,但是为什么它应该在配置块内部呢?与配置相关的设置应该始终在
config
块内部进行,因为它是所有框架遵循的标准模式。您可以提供一个示例吗?在django或nodejs上?@Kevin你尝试过我添加到答案中的node.js中间件吗?我尝试过,但无法让中间件正常工作,我需要对我的own@Mordredplz提供了一个例子。我需要一个我的应用程序,如果你能提供我使用中间件节点js和字体使用角度js的例子。