2012-12-14 67 views
1

在我的Rails 2應用程序中,我發現路由中存在一個安全錯誤。我正在使用Rails 2.3.8。下面是我的實現:Rails2路由問題

# 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標籤中。

如果I幀的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以支持這個或任何其他解決方案。請幫忙。

回答

3

我不知道,你可以在途中做到這一點對Rails 3.2作爲約束選項不存在。我建議你在控制器中實現這個,最後是before_filter。如果必須在不同的控制器之間共享,可以將它放在ApplicationController中。

UPDATE:添加例如

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 
+0

所以你說,我在控制器本身一樣實施的before_filter要查詢的網址名稱驗證URL的名字嗎?這是禮儀嗎? – palani

+0

是的,請參閱我剛剛添加到我的答案中的示例。你可以適應正則表達式來匹配你的需要以及你定義'check_view_url'並定義了'before_filter'的位置。 –

+0

感謝Adrien Coquio。這確實節省了我很多時間 – palani