在Rails 3中基于return_to param保护重定向

时间:2012-01-07 22:21:19

标签: ruby-on-rails-3 security redirect

我有一些操作重定向回到我网站中的另一个位置,我使用原始页面中的参数传递。

在我的application_controller.rb我有这个方法,我在其他控制器中用来获取和处理参数return_to

def redirect_to_return_to_or_default(default)
  if params[:return_to].present?
    redirect_to params[:return_to]
    return
  end

  redirect_to default

阅读Security Guide我看到这可以用于网上诱骗攻击,所以我想保护它,可能是通过过滤return_to来重定向到我域中的网址。

我错过了什么吗?有关如何以简单而优雅的方式执行此操作的任何想法?

1 个答案:

答案 0 :(得分:2)

我在ApplicationController中添加了以下私有方法

  def redirect_to_param(token)
    unless token.blank?
      parsed_token = URI.parse(token)
      res = ""
      res << parsed_token.path
      unless parsed_token.query.blank?
        res << "?"
        res << parsed_token.query
      end
      return res
    end
  end

然后,无论我想将其重定向到用户提供的参数,我都会说

redirect_to redirect_to_param(params[:redirect])

会喜欢反馈其他人如何做到这一点。