首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重构到RubyAmf之后,Rails似乎并没有抱怨authenticity_token

在重构到RubyAmf之后,Rails似乎并没有抱怨authenticity_token
EN

Stack Overflow用户
提问于 2010-03-06 18:21:17
回答 3查看 255关注 0票数 0

我正在构建一个Flex4+ Rails 2.3.5应用程序。首先,我使用XML传递日期,我经常收到一个错误,抱怨我手动传递的身份验证令牌,然后才能通过这个错误。

在那之后,我重构了我的代码以使用RubyAmf,它似乎可以工作,但我一开始并没有传入authenticity_token,但我注意到Rails没有任何错误,请求也通过了。我的应用程序仍然有未注释的protect_from_forgery。

RubyAmf会以某种方式绕过它吗?

谢谢,

Tam

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-07 02:15:09

Ruby AMF直接调用控制器操作,并将序列化后的结果返回给AMF。这与标准HTTP请求的工作方式相反,标准HTTP请求首先通过路由器。

票数 1
EN

Stack Overflow用户

发布于 2010-03-07 02:10:22

我相信伪造保护不会触发GET请求,只会触发POSTS、DELETE和PUT。也许您正在测试的场景正在执行GET请求?

票数 1
EN

Stack Overflow用户

发布于 2011-10-20 20:34:13

为了更详细地解释camwest的答案:

当您向articles_controllerupdate操作发出AMF请求时,该请求实际上并不会直接到达该控制器和操作。这个AMF请求(这是一个POST请求)实际上通过Rails路由器到达rubyamf_controllergateway操作(AMF端点)。目标控制器和动作(articles_controllerupdate动作)被标记为此POST请求的参数。

在此POST调用中设置的mime_typeamf。RubyAMF插件将此mime_type添加到未检查伪造保护的mime_types列表中。因此,即使没有authenticity_token,对rubyamf_controllergateway操作的调用也会成功完成。

在Flex中,您可能已经向articles_controllerupdate操作发送了一些参数。这些对象作为序列化的AMF对象到达gateway操作。这些参数在这里被反序列化。

然后,gateway操作在内部调用目标控制器和操作(articles_controllerupdate操作)。目标操作完成它的工作并返回一个响应。gateway操作获取此目标操作的响应,将其序列化为AMF并将其发送回客户端。

在Rails2.x中,这个内部调用没有调用伪造保护机制。因此,即使您没有将authenticity_token作为参数之一发送到目标操作,它也可以正常工作。

这在Rails3中发生了变化,即使是内部调用也会调用伪造保护机制。目标操作检查是否存在authenticity_token参数。因此,您需要从Flex发送它。

更多信息请点击这里:http://anjantek.com/2011/05/08/rails-3-rubyamf-flex-csrf-solution/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2392135

复制
相关文章

相似问题

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