如何获得CSRF令牌rails3.2.x,发送POST宁静/ PUT API,而不从服务器端的任何形

2019-07-30 02:25发布

我知道从轨道提供Rails3中CSRF保护默认。 但我的web应用程序是一个单页的应用程序,并且所有的通信依赖于阿贾克斯。

那么,如何从服务器获取CSRF令牌每个AJAX调用之前? 还是什么我能做的仅仅是起飞CSRF保护,对不对?

注意:我们不使用任何防护栏查看制作网页,连网页,所以把“<%= csrf_meta_tag%>”以html或.erb是无效的解决方案,我们使用JavaScript框架在一个页面内。 。

我ENV:rails3.2.3,devise2.0.4,dojo1.7.2

Answer 1:

我会建议你去看看在Rails的骨干项目。 具体的backbone_rails_sync.js文件。

这表明这种宝石如何与您对服务器的任何Ajax请求一起发送CSRF令牌数据。

另外,这里有一些文档由Django项目 ,让你如何重写默认jQuery的阿贾克斯()方法总是发送一个CSRF令牌的例子。

基于评论更新:

那么,你在哪里问的是使用只是一个REST API,没有意见时如何实现CSRF /形式以任何方式使用。

答案是: 不包括CSRF保护

跨站点请求伪造就是在发送无效数据到另一个服务器(恶意)网站转载或模仿的请求,并伪装成合法用户的方式。

这只是一个问题,当用户需要进行身份验证和认证状态保存在高速缓存(页面访问量之间保持的)。 如果一个恶意网站劫持该缓存,它可以同时假装成该用户提交的数据,而无需在用户和服务器曾经注意到这一点。 这就是CSRF保护被雇佣做的,它注入一个特殊字符串成只适用于这个特定的请求,是对对方的请求唯一的,所以即使会话劫持形式的CSRF保护防止在任何修改服务器。

在你的情况但是,你正在使用HTTP API调用,因此必须发送身份验证通过使用的每个请求Authorization header 。 这样,凭据不会被缓存,并且不能被劫持,所以没有必要CSRF保护。

还有其他的方法但是,以确保您的RESTful API是安全的:

  • 总是以加密的形式发送的数据通过线路(HTTPS / SSL)
  • 使用OAuth的一样(2),API令牌或基本HTTP验证了良好的验证方法(最后两个不太安全,但仍然是较小的应用足够安全)
  • 对他们采取行动之前,一定要检查每一个值进入你的应用程序


文章来源: How to get CSRF token with rails3.2.x, before sending restful POST/PUT API, without any form/UI from server side?