0

我目前正在开发一个由 Rails 提供支持的头像应用程序,用户可以在其中为他们的用户个人资料上传头像。

我想使用自定义 HTTP 标头来阻止公共上传请求,并且只允许来自我的应用程序的请求。我将如何使用 Ruby on Rails 执行此操作?

我正在使用 AJAX 上传头像,所以这可能有点困难。此外,我不希望在公共 HTML 代码中显示标题,否则它会破坏添加它的对象!

4

2 回答 2

0

如果你添加

 protect_from_forgery

到您的应用程序控制器,它将阻止来自 3rd 方链接的所有 NON Get 请求。它将使用身份验证令牌向每个表单添加一个隐藏的输入值,该身份验证令牌将用于检查发送到服务器的所有数据。

进一步阅读

http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf

http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html

Rails 3.1 - 忽略 CSRF?

于 2012-07-30T21:51:04.177 回答
0

您可以实现自定义 HTTP 标头(例如X-Foobar-Validity-Status: valid)并将其签入before_filter.

class YourController < ApplicationController
  before_filter :check_header

  def check_header
    unless request.headers['X-Foobar-Validity-Status'] == "valid"
      render json: {"error" => "You are an evil attacker. Go away"}
    end
  end
end

但是,我认为这是一个坏主意。

  • 攻击者可以读取您的 HTTP 请求的数据包转储并添加标头,即使使用 jQuery。请参阅jQuery.ajax标题选项
  • 我将User-Agent为此目的使用,而不是使用专有标头。

相反,我建议使用protect_from_forgery导轨机制。它使您的生活更轻松,更安全。只需在您的应用程序中通过 http 请求获取真实性令牌,然后将其与您的请求一起发回。这应该可以阻止入侵者。

于 2012-07-30T21:55:19.877 回答