带有移动应用程序的 Railsprotect_from_forgery

Posted

技术标签:

【中文标题】带有移动应用程序的 Railsprotect_from_forgery【英文标题】:Rails protect_from_forgery with Mobile Apps 【发布时间】:2012-03-15 20:20:23 【问题描述】:

我正在 Rails 上构建一个应用程序,我的 application.rb 中有 protect_from_forgery。我还为移动应用构建了一个 RESTful API,以便使用 JSON 数据进行通信。我看到一些网站声称为了让移动应用程序与 rails 应用程序交互,他们关闭了 JSON 请求的protect_from_forgery

这如何解决 CSRF 的问题?恶意网站能否没有代表用户执行不良更改的 JSON POST 请求?

所以,为了解决这个问题,我决定使用自定义的mime-type 或者可能只有移动应用程序会使用的special key,然后让protect_from_forgery 执行以下操作:

    检查 csrf 令牌是否以 hidden div 的形式出现(对于 Web 应用程序为 true,默认情况下包含)。 如果不存在,请检查此special keymime-type

有没有办法实现这个或类似的方法来解决这个问题?

更新

原来是我想多了这个问题。 Rails 是“神奇的”,它以某种方式自动、适当地处理来自移动应用程序的请求,而不会引发异常。所以,基本上我们根本不需要做任何修改。

不过,我并没有完全检查 Rails 是如何实现这一点的 - 从教学法上讲,这对某些人来说可能仍然很有趣。

【问题讨论】:

移动应用的请求是如何产生的? 【参考方案1】:

您不必使用 ActiveResources。如果您以 xml 格式发送请求,那么它将绕过protect_from_forgery。

curl -H "Content-Type: text/xml" -d "<support-request><from>...</from></support-request>" -X POST http://localhost:3000/support_requests.xml -i

应该很简单。

【讨论】:

以上是关于带有移动应用程序的 Railsprotect_from_forgery的主要内容,如果未能解决你的问题,请参考以下文章

强制链接从带有 javascript 的 Web 应用程序在移动 Safari 中打开

带有 Node.js 后端的移动应用程序 - 为客户端开发选择啥框架?

带有 phonegap 的 Jquery mobile 不适用于移动应用程序

带有服务器推送的移动和桌面 Web 应用程序

Sceneview 翻译/移动带有手势的视角相机

带有大标题导航的 UITableView UIRefreshControl 不会停留在顶部 - 它会移动