Angular JS在POST请求中验证CSRF令牌

时间:2013-01-01 11:12:15

标签: angularjs javascript-framework

我正在使用AngularJS和Rails。我有以下请求批量更新用户。

 $http{
    method: 'POST',
    url: $scope.update_url,
    params: {selected_ids: userIds}
 }

由于URL的长度限制(http://support.microsoft.com/kb/208427),这不能是'GET'请求

但是对于'POST'请求,我们需要在标题中有一个CSRF真实性标记。

如何将CSRF令牌设置为后置请求标头?

3 个答案:

答案 0 :(得分:66)

您可以按照$http服务中的说明设置http标头。

您可以全局设置:

$httpProvider.defaults.headers.post['My-Header']='value'   (or)
$http.defaults.headers.post['My-Header']='value';

或单个请求:

$http({
   headers: {
      'My-Header': 'value'
   }  
});

以下是Angular的重要引用:

  

跨站点请求伪造(XSRF)保护XSRF是一种技术   未经授权的网站可以获取用户的私人数据。角   提供以下机制来对抗XSRF。执行XHR时   请求,$ http服务从名为cookie的cookie中读取令牌   XSRF-TOKEN并将其设置为HTTP标头X-XSRF-TOKEN。仅限   在您的域上运行的JavaScript可以读取cookie,即您的服务器   可以放心,XHR来自运行在你身上的JavaScript   域。

     

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

答案 1 :(得分:1)

如果您想知道如何在Rails中实际设置XSRF-TOKEN cookie值,那么这个答案有一个实现Rails CSRF Protection + Angular.js: protect_from_forgery makes me to log out on POST

答案 2 :(得分:0)

我最近遇到了同样的问题,并添加了gem angular_rails_js解决了它。据我所知,它为每个rails控制器创建一个带有CSR CSR-TOKEN的cookie,它将通过angular $ http捕获(默认的$ http行为)。

相关问题