0

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

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

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

  1. 检查 csrf 令牌是否以 a 的形式存在hidden div(对于 Web 应用程序为 true,并且默认包含)。
  2. 如果不存在,请检查此special keymime-type

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

更新

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

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

4

1 回答 1

2

您不必使用 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

它应该很简单。

于 2012-03-04T08:05:51.953 回答