Angularjs 在POST请求中验证CSRF令牌
我将AngularJS与Rails一起使用。我有以下批量更新用户的请求Angularjs 在POST请求中验证CSRF令牌,angularjs,javascript-framework,Angularjs,Javascript Framework,我将AngularJS与Rails一起使用。我有以下批量更新用户的请求 $http{ method: 'POST', url: $scope.update_url, params: {selected_ids: userIds} } 由于URL长度的限制,这不能是“GET”请求(http://support.microsoft.com/kb/208427) 但是对于“POST”请求,我们需要在头中有一个CSRF真实性令牌 如何将CSRF令牌设置为post请求头?您可
$http{
method: 'POST',
url: $scope.update_url,
params: {selected_ids: userIds}
}
由于URL长度的限制,这不能是“GET”请求(http://support.microsoft.com/kb/208427)
但是对于“POST”请求,我们需要在头中有一个CSRF真实性令牌
如何将CSRF令牌设置为post请求头?您可以按照服务中的说明设置http头 您可以在全球范围内进行设置:
$httpProvider.defaults.headers.post['My-Header']='value' (or)
$http.defaults.headers.post['My-Header']='value';
或对于单个请求:
$http({
headers: {
'My-Header': 'value'
}
});
以下是一段重要的引语:
跨站点请求伪造(XSRF)保护XSRF是由
未经授权的站点可以获取用户的私有数据。有棱角的
提供以下机制来对抗XSRF。执行XHR时
请求时,$http服务从名为
XSRF-TOKEN并将其设置为HTTP头X-XSRF-TOKEN。只因为
在您的域上运行的JavaScript可以读取cookie,即您的服务器
可以肯定的是,XHR来自于在您的计算机上运行的JavaScript
域名
要利用这一点,服务器需要在
在第一个HTTP GET上名为XSRF-TOKEN的JavaScript可读会话cookie
要求在后续的非GET请求中,服务器可以验证
cookie与X-XSRF-TOKEN HTTP头匹配,因此请确保
只有在您的域上运行的JavaScript才能读取令牌。这个
令牌对于每个用户都必须是唯一的,并且必须可由
服务器(防止JavaScript生成自己的令牌)。我们
建议令牌是站点身份验证的摘要
加盐的饼干,增加安全性
如果您想知道如何在Rails中实际设置XSRF-TOKEN cookie值,那么这个答案有一个实现我最近遇到了同样的问题,添加gem解决了这个问题。据我所知,它为每个rails控制器创建了一个带有rails CSRF-TOKEN的cookie,该cookie将被$http捕获(默认$http行为) 谢谢阿斯哥特!这是设置CSRF令牌的post请求的正确方式吗?或者我应该创建一个隐藏表单并在ng-click()上提交带有StudentID的表单吗?但在这种情况下,我如何获得响应数据?再次感谢!我已经添加了angular本身的一句话。我不清楚为什么这个解决方案与angular的文档一致。文档说明您需要设置cookie,但您似乎是在手动设置标头。@asgoth我不确定这是如何计数器CSRF的。我认为CSRF是有效的,因为从另一个浏览器页面调用同一个域会重新发送与该域关联的cookie。如果我们将令牌放在cookie中,那么该检查不会变得无用吗?@RevNoah顶部的代码示例是如何在$http服务上设置头的通用示例。如果设置了cookie标记,则将自动设置标头。