为Rails设置HTTP标头form_for

时间:2012-07-30 20:16:45

标签: ruby-on-rails upload http-headers

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

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

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

2 个答案:

答案 0 :(得分:0)

如果你添加

 protect_from_forgery

到您的应用程序控制器,它将阻止来自第三方链接的所有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 ignored?

答案 1 :(得分: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

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

  • 即使使用jQuery,攻击者也可以读取HTTP请求的数据包转储并添加标头。请参阅jQuery.ajax headers option
  • 我会使用User-Agent来代替使用专有标题。

相反,我会使用rails的protect_from_forgery机制来提升。它让您的生活更轻松,更安全。只需通过应用中的http请求获取authenticanticy令牌,然后将其与您的请求一起发回。这应该会阻止入侵者。