我最近将Brakeman宝石添加到我的宝石文件中,并且必须查看,我应该使用
:only_path => true
以使其更加安全。但我使用的是嵌套资源,不知道具体如何使用,这是我的控制器中的部分。
if @comment.update_attributes(params[:comment])
redirect_to [@message, @comment], notice: 'Comment was successfully updated.'
我怎么能做到这一点,我只看到了带有url_for-helper的only_path属性。谢谢你的帮助!
简单的回答是,在这种情况下,制动员无论如何都会抱怨。一个解决方案正在酝酿之中(https://github.com/presidentbeef/brakeman/issues/143)。
照原样,您的代码是安全的。第一个参数被传递给url_fo,在本例中,它基于您的模型构建一个多态路由。
请注意,默认情况下:only_path为true,因此您将获得相对路径"/controller/action"而不是完全限定的URL,如"example.com/controller/action"
但为了回答你的问题,它会在第一个参数解析为字符串的任何形式上发出警告,尽管这是一个弱置信度警告。这将被修复。
唐警报。假设你想重定向到@message.some_url。这将生成一个高置信度警告,你可以用以下方法修复:
redirect_to URI.parse(url_for(@message.some_url)).path, notice: 'Comment was successfully updated'