在我的Rails 2应用程序中,我发现了路由中的安全漏洞。我正在使用Rails 2.3.8。这是我的实施:
# routes.rb
map.connect 'sampleview', :controller => 'sample', :action => 'view'
在某些情况下,我的网址就像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
Google登录页面位于我的应用程序中的iframe标记中。这个不好。
如果网址http://example.com/sampleview?view_url=http://www.google.com包含的不是test.com。我必须向用户发送消息。这不是有效的网址。
如何修改我的routes.rb以支持此解决方案或任何其他解决方案。请帮忙。
答案 0 :(得分:3)
我不确定您是否可以在Rails 3.2中执行此操作,因为路由上的约束选项不存在。我建议你在控制器中实现它,最终使用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