gpt4 book ai didi

ruby-on-rails - 如何在发送 Restful POST/PUT API 之前使用 rails3.2.x 获取 CSRF token ,而无需来自服务器端的任何表单/UI?

转载 作者:行者123 更新时间:2023-12-04 20:16:47 28 4
gpt4 key购买 nike

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

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

注意:我们不使用任何 Rails View 来生成网页,甚至是主页,所以 的解决方案将“<%= csrf_meta_tag %>”放入.html 或.erb 无效 .,我们在一页内使用javascript框架。

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

最佳答案

我建议你看看 Rails-backbone项目。特别是 backbone_rails_sync.js文件。

它显示了这个 gem 如何将 CSRF token 数据连同您向服务器发出的任何 ajax 请求一起发送。

另外,这里有一些docs by the Django project它为您提供了一个示例,说明如何覆盖默认的 jQuery ajax() 方法以始终发送 CSRF token 。

根据评论更新:

所以你问的是如何在只使用 REST API 并且不以任何方式使用 View /表单时实现 CSRF。

答案是:不包括 CSRF 保护 .

Cross-site request forgery是另一个(恶意)网站复制或模仿请求并伪装成有效用户同时向服务器发送无效数据的一种方式。

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

但是,在您的情况下,您正在使用 HTTP API 调用,因此必须通过使用 Authorization header 发送您的身份验证每个请求。 .这样,凭证永远不会被缓存,也不会被劫持,因此不需要 CSRF 保护。

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

  • 始终以加密形式通过网络发送数据 (https/ssl)
  • 使用良好的身份验证方法,如 oAuth(2)、API token 或基本 HTTP 身份验证(最后两个不太安全,但对于较小的应用程序仍然足够安全)
  • 在对它们进行操作之前,始终检查进入应用程序的每个值
  • 关于ruby-on-rails - 如何在发送 Restful POST/PUT API 之前使用 rails3.2.x 获取 CSRF token ,而无需来自服务器端的任何表单/UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192673/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com