我知道rails在默认情况下提供了来自rails3的CSRF保护。但是我的web应用程序是一个单一的页面应用程序,所有的通信都依赖于ajax。
因此,如何在每次ajax调用之前从服务器获得CSRF令牌?或者我能做的就是脱下CSRF保护,对吧?
注意:我们不使用任何rails视图来生成网页,甚至是主页,因此在.html或.erb中放置"<%= csrf_meta_tag %>“的解决方案是无效的。我们在一个页面内使用javascript框架。
我的env: rails3.2.3,devise2.0.4,dojo1.7.2
发布于 2012-06-25 16:17:22
它展示了gem如何向服务器发送CSRF令牌数据以及任何ajax请求。
另外,下面是一些Django项目的文档,它给出了一个示例,说明如何覆盖默认的jQuery ajax()方法,以始终发送CSRF令牌。
基于评论更新的:
因此,您要问的是,在只使用REST和不以任何方式使用视图/表单时,如何实现CSRF。
答案是:不包括CSRF保护。
跨站点请求伪造是另一个(恶意)网站在向服务器发送无效数据时复制或模仿请求并将其伪装为有效用户的一种方式。
这只是当用户需要进行身份验证并将身份验证状态保存在缓存中(在页面视图之间持久化)时才会出现问题。如果恶意网站劫持了这个缓存,它可以在假装是这个用户的同时提交数据,而用户和服务器从来没有注意到这一点。这就是CSRF保护所要做的,它向表单中注入一个特殊字符串,该字符串仅对此特定请求有效,并且对彼此的请求是唯一的,因此即使会话被劫持,CSRF保护也会防止服务器上的任何修改。
但是,在您的示例中,您使用的是HTTP调用,因此必须通过使用Authorization header
发送每个请求的身份验证。这样,凭据就不会缓存,也不会被劫持,因此不需要CSRF保护。
但是,还有其他方法可以确保您的RESTful API是安全的:
https://stackoverflow.com/questions/11192673
复制相似问题