我知道从轨道提供Rails3中CSRF保护默认。 但我的web应用程序是一个单页的应用程序,并且所有的通信依赖于阿贾克斯。
那么,如何从服务器获取CSRF令牌每个AJAX调用之前? 还是什么我能做的仅仅是起飞CSRF保护,对不对?
注意:我们不使用任何防护栏查看制作网页,连网页,所以把“<%= csrf_meta_tag%>”以html或.erb是无效的解决方案,我们使用JavaScript框架在一个页面内。 。
我ENV:rails3.2.3,devise2.0.4,dojo1.7.2
我知道从轨道提供Rails3中CSRF保护默认。 但我的web应用程序是一个单页的应用程序,并且所有的通信依赖于阿贾克斯。
那么,如何从服务器获取CSRF令牌每个AJAX调用之前? 还是什么我能做的仅仅是起飞CSRF保护,对不对?
注意:我们不使用任何防护栏查看制作网页,连网页,所以把“<%= csrf_meta_tag%>”以html或.erb是无效的解决方案,我们使用JavaScript框架在一个页面内。 。
我ENV:rails3.2.3,devise2.0.4,dojo1.7.2
我会建议你去看看在Rails的骨干项目。 具体的backbone_rails_sync.js文件。
这表明这种宝石如何与您对服务器的任何Ajax请求一起发送CSRF令牌数据。
另外,这里有一些文档由Django项目 ,让你如何重写默认jQuery的阿贾克斯()方法总是发送一个CSRF令牌的例子。
基于评论更新:
那么,你在哪里问的是使用只是一个REST API,没有意见时如何实现CSRF /形式以任何方式使用。
答案是: 不包括CSRF保护 。
跨站点请求伪造就是在发送无效数据到另一个服务器(恶意)网站转载或模仿的请求,并伪装成合法用户的方式。
这只是一个问题,当用户需要进行身份验证和认证状态保存在高速缓存(页面访问量之间保持的)。 如果一个恶意网站劫持该缓存,它可以同时假装成该用户提交的数据,而无需在用户和服务器曾经注意到这一点。 这就是CSRF保护被雇佣做的,它注入一个特殊字符串成只适用于这个特定的请求,是对对方的请求唯一的,所以即使会话劫持形式的CSRF保护防止在任何修改服务器。
在你的情况但是,你正在使用HTTP API调用,因此必须发送身份验证通过使用的每个请求Authorization header
。 这样,凭据不会被缓存,并且不能被劫持,所以没有必要CSRF保护。
还有其他的方法但是,以确保您的RESTful API是安全的: