2012-09-06 24 views
0

我最近添加的司閘員寶石我的Gemfile,不得不看,我應該用安全重定向到嵌套資源在Rails中

:only_path => true 

,使之更加安全。但我使用嵌套的資源,不知道如何,這裏是我的控制器的一部分。

if @comment.update_attributes(params[:comment]) 
    redirect_to [@message, @comment], notice: 'Comment was successfully updated.' 

我怎樣才能做到這一點,我只看到了與url_for幫手only_path屬性。 感謝您的幫助!

+0

這會產生一個低置信度的警告,對吧? – oreoshake

+0

隨時加入對話https://github.com/presidentbeef/brakeman/issues/143#issuecomment-8378199 :) – oreoshake

+0

@oreoshake:是的,低信心。無論如何,我想解決它們,以便更安全地解決安全問題。 –

回答

2

簡而言之,無論如何,制動員都會在這種情況下發出抱怨。解決方法是混合(https://github.com/presidentbeef/brakeman/issues/143)。

因爲,您的代碼是安全的。第一個參數傳遞給url_for,在這種情況下,它會根據您的模型構建多態路線。

注意,默認情況:only_path是真實的,所以你會得到相對 「/控制器/動作」,而不是完全合格的URL像 「example.com/controller/action」

但要回答你的問題,它會警告任何形式的第一個參數解析爲字符串,儘管弱信心警告。這將被修復。

TANGENT警報。假設你想要redirect_to @ message.some_url。這將產生一個高可信度的警告,你可以用類似的方法修復:

redirect_to URI.parse(url_for(@message.some_url)).path, notice: 'Comment was successfully updated'