1

在我的 Rails 2 应用程序中,我在路由中发现了一个安全漏洞。我正在使用 Rails 2.3.8。这是我的实现:

# routes.rb
map.connect 'sampleview', :controller => 'sample', :action => 'view'

在某些情况下,我的 URL 类似于http://example.com/sampleview?view_url=http://test.com?s=2&code=15

在这种情况下,我去了 test.com(这个 test.com 是我在我的应用程序中显示的另一个域)并且页面被放置在 iframe 标记中。

问题是假设如果我构建 url:

http://example.com/sampleview?view_url=http://www.google.com

谷歌登陆页面被放置在我的应用程序中的 iframe 标记中。不是很好。

如果 URL http://example.com/sampleview?view_url=http://www.google.com包含 test.com 以外的内容。我必须向用户提出信息。这在此处不是有效的 URL。

如何修改我的 routes.rb 以支持此解决方案或任何其他解决方案。请帮忙。

4

1 回答 1

3

我不确定您是否可以在 Rails 3.2 中执行此操作,因为 route 上的约束选项不存在。我建议您在控制器中实现这一点,最终使用before_filter. ApplicationController如果您必须在不同的控制器之间共享它,您可以将它放在。

更新:添加示例

class ApplicationController
  before_filter :check_view_url

  private

  def check_view_url
    if params[:view_url] && params[:view_url] !~ %r{^http://test.com}
      raise "Trying to access invalid website"
    end
  end

end
于 2012-12-14T08:44:20.410 回答