首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在发送restful /PUT API之前,如何使用rails3.2.x获得CSRF令牌,而服务器端没有任何表单/UI?

在发送restful /PUT API之前,如何使用rails3.2.x获得CSRF令牌,而服务器端没有任何表单/UI?
EN

Stack Overflow用户
提问于 2012-06-25 15:47:35
回答 1查看 2.7K关注 0票数 5

我知道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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-25 16:17:22

我建议您看看铁轨-主干线项目。特别是sync.js文件。

它展示了gem如何向服务器发送CSRF令牌数据以及任何ajax请求。

另外,下面是一些Django项目的文档,它给出了一个示例,说明如何覆盖默认的jQuery ajax()方法,以始终发送CSRF令牌。

基于评论更新的

因此,您要问的是,在只使用REST和不以任何方式使用视图/表单时,如何实现CSRF。

答案是:不包括CSRF保护

跨站点请求伪造是另一个(恶意)网站在向服务器发送无效数据时复制或模仿请求并将其伪装为有效用户的一种方式。

这只是当用户需要进行身份验证并将身份验证状态保存在缓存中(在页面视图之间持久化)时才会出现问题。如果恶意网站劫持了这个缓存,它可以在假装是这个用户的同时提交数据,而用户和服务器从来没有注意到这一点。这就是CSRF保护所要做的,它向表单中注入一个特殊字符串,该字符串仅对此特定请求有效,并且对彼此的请求是唯一的,因此即使会话被劫持,CSRF保护也会防止服务器上的任何修改。

但是,在您的示例中,您使用的是HTTP调用,因此必须通过使用Authorization header发送每个请求的身份验证。这样,凭据就不会缓存,也不会被劫持,因此不需要CSRF保护。

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

  • 总是以加密的形式(https/ssl)通过线路发送数据。
  • 使用一种好的身份验证方法,如oAuth(2)、API令牌或基本HTTP身份验证(最后两种方法不太安全,但对于较小的应用程序仍然足够安全)
  • 始终检查应用程序中的每个值,然后再对它们进行操作。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11192673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档