我有一些操作重定向回或重定向到我的网站中的另一个位置,我通过原始页面的参数传递了这些位置。
在我的 application_controller.rb
我有这种方法,我在其他 Controller 中使用它来获取和处理参数 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
仅重定向到我域中的 URL。我错过了什么吗?关于如何以简单而优雅的方式执行此操作的任何想法?
最佳答案
我在我的 ApplicationController 中添加了以下内容作为私有(private)方法
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])
也希望得到其他人如何做到这一点的反馈。
关于ruby-on-rails-3 - 基于 Rails 3 中的 return_to 参数保护重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8773581/