在发送restful POST/PUT API之前,如何使用rails3.2.x获取CSRF令牌,而不需要来自服务器端的任何表单/UI?

2024-02-22

我知道rails默认从rails3开始提供CSRF保护。 但我的Web应用程序是单页应用程序,所有通信都依赖于ajax。

那么,如何在每次 ajax 调用之前从服务器获取 CSRF 令牌? 或者我能做的就是取消 CSRF 保护,对吗?

注意:我们不使用任何 Rails 视图来生成网页,甚至是主页,因此解决方案将“”放入 .html 或 .erb 中无效.,我们在一个页面内使用javascript框架。

我的环境:rails3.2.3、devise2.0.4、dojo1.7.2


我建议你看看Rails-骨干 https://github.com/codebrew/backbone-rails项目。具体来说backbone_rails_sync.js https://github.com/codebrew/backbone-rails/blob/master/vendor/assets/javascripts/backbone_rails_sync.js#L21-L31 file.

它展示了这个 gem 如何将 CSRF 令牌数据以及您向服务器发出的任何 ajax 请求一起发送。

另外,这里还有一些Django 项目的文档 https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax这为您提供了如何覆盖默认 jQuery ajax() 方法以始终发送 CSRF 令牌的示例。

根据评论更新:

所以你问的是如何在只使用 REST API 并且不以任何方式使用视图/表单的情况下实现 CSRF。

答案是:不包括 CSRF 保护.

跨站请求伪造 https://en.wikipedia.org/wiki/CSRF是另一个(恶意)网站复制或模仿请求并冒充有效用户并向服务器发送无效数据的一种方式。

仅当用户需要进行身份验证并且身份验证状态保存在缓存中(以在页面视图之间保留)时,这才会出现问题。如果恶意网站劫持了该缓存,它就可以冒充该用户提交数据,而用户和服务器都不会注意到这一点。这就是 CSRF 保护的作用,它会在表单中注入一个特殊的字符串,该字符串仅对该特定请求有效,并且对于每个其他请求都是唯一的,因此即使会话被劫持,CSRF 保护也会阻止对会话进行任何修改。服务器。

然而,就您而言,您正在使用 HTTP API 调用,因此必须通过使用Authorization header。这样,凭证就不会被缓存,也不会被劫持,因此不需要 CSRF 保护。

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

  • 始终以加密形式通过线路发送数据 (https/ssl)
  • 使用良好的身份验证方法,例如 oAuth(2)、API 令牌或基本 HTTP 身份验证(后两个安全性较差,但对于较小的应用程序来说仍然足够安全)
  • 在对应用程序执行操作之前,始终检查进入应用程序的每个值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在发送restful POST/PUT API之前,如何使用rails3.2.x获取CSRF令牌,而不需要来自服务器端的任何表单/UI? 的相关文章

  • 从 Rails 2.3.8 升级到 4.0

    我正在 Rails 2 3 8 上运行一个应用程序 我计划将其升级到 Rails 4 0 RC 版 对我来说最简单的方法是什么 我需要先升级到 Rails 3 x 吗 注意 在我当前的实现中 我使用八哥和雪貂 作为升级的一部分 我也在考虑搬
  • Rails 上的 SASS 无效 CSS 错误

    我正在尝试使用http startbootstrap com stylish portfolio http startbootstrap com stylish portfolio但是 在我的 Rails 应用程序中 我在 vintage
  • Rails:将参数从视图传递到控制器

    我在 Rails 中有以下模型 class Task lt ActiveRecord Base attr accessible description name project belongs to project validates na
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • S3 的 Rails 回形针默认图像

    我尝试在应用程序中使用default url 但我使用S3 存储图像 我不确定我需要在那里输入什么 URL 或者我是否必须创建一个假图像才能将所有内容放在那里 由于我的图像总是通过 S3 渲染 所以我不知道如果我只是在公共文件夹中放入一些默
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • Rails:验证字符串的最小和最大长度,但允许其为空白

    我有一个想要验证的字段 我希望该字段能够留空 但如果用户输入数据 我希望它采用某种格式 目前我在模型中使用以下验证 但这不允许用户将其留空 validates length of foo maximum gt 5 validates len
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销
  • Rails 3 按字段排序和最后

    您好 我对 Rails 3 2 和订购有疑问 当想要按字段对集合进行排序时 调用时 last ActiveRecord行为怪异 gt gt User order FIELD id 1 User Load 0 4ms SELECT users
  • 使用brew时出现“错误的解释器”错误

    当我尝试运行任何 brew 命令时 出现此错误 Holger Sindbaeks MacBook Air holgersindbaek brew help bash usr local bin brew usr bin ruby bad i
  • Rails 5 - Google 地图 - Javascript 错误 - initMap 不是函数 - 修复一个 js 问题会产生另一个问题

    多年来我一直在尝试弄清楚如何在我的 Rails 应用程序中使用谷歌地图 我目前正在尝试使用 Rails 5 我也一直在试图弄清楚如何让我的 javascript 在生产环境中工作 我最近对这些挑战的尝试概述于生产问题帖子 https sta
  • 如何将 CarrierWave 文件迁移到新的存储机制?

    我有一个 Ruby on Rails 站点 其中包含使用 CarrierWave 进行文件处理的模型 当前使用本地存储 我想开始使用云存储 并且需要将现有的本地文件迁移到云端 我想知道是否有人可以指出这样做的方法 使用模型属性的好处是 它允
  • Rails ActiveRecord:是否可以组合 :include 和 :conditions 查询?

    想象一下我有 wiki 文章 有很多修订 我想通过数据库使用 ActiveRecord 进行查询 该查询仅返回那些在过去 24 小时内更新过修订的文章 这样的事可能吗 我想它会是这样的 Articles find all include g
  • 动态分配背景图片scss/sass

    我想要做的是有一个表单 您可以在其中上传图片 然后当您查看该对象时 图片会在特定 div 中居中 垂直和水平向上倾斜 其大小未知等 除非有办法使用 image tag 帮助器将其垂直居中 否则我希望能够使用该图像作为背景图像 在我的 css
  • 使用ajax轮询服务器

    我正在建立一个网站 该网站有一个用户可以互相发送消息的系统 我希望这样当登录用户收到消息时 他会在屏幕上看到一些更新告诉他这一点 这些消息不必是实时的 所以我认为我不想用彗星或主宰之类的东西来推动 相反 我很乐意每隔一分钟左右轮询一次服务器
  • 在 Rails ActiveAdmin 视图中添加指向 Flash 通知的链接

    我正在尝试在活动管理控制器成功创建操作的闪存消息中添加链接 但是该链接的 HTML 被转义并在视图上显示为纯文本 Rails 5 2 1 ruby 2 5 3p105 2018 10 18 修订版 65156 x86 64 linux 例如
  • Rspec 控制器测试,传递 JSON 参数

    我试图实现以下目标 在 RSpec 控制器测试中创建 POST json 请求 并向其传递参数 这是我的代码 it returns access token do post login email bla password bla1 for
  • 将 Twitter 引导样式添加到 Rails 表单助手

    在阅读建议我使用带有引导程序集成的 Simple form gem 的答案后 我安装了它并根据 simple form 说明创建了我的表单 但输入框向右浮动 这是布局 正在使用部分 shared reg 调用该表单 div class co

随机推荐