Ruby on rails 4 直接通过密钥访问params散列中的值是否不安全?

Ruby on rails 4 直接通过密钥访问params散列中的值是否不安全?,ruby-on-rails-4,strong-parameters,Ruby On Rails 4,Strong Parameters,我刚和一位同事讨论过,我们有一条嵌套路线: /foo/:foo_id/bar/:id(.:format) 在控制器中,我正在执行以下操作: Foo.find(params[:foo_id]) 他说我应该通过强大的params获得foo_id,但我不同意。我认为强params是为了确保params中的数组不包含您未指定的键,并且对值本身不做任何处理 谁是对的 编辑,在更新记录的情况下,下面的内容是对的还是错的?因此,通过参数获取id本身,然后对属性数组使用强参数 Foo.find(params

我刚和一位同事讨论过,我们有一条嵌套路线:

/foo/:foo_id/bar/:id(.:format)
在控制器中,我正在执行以下操作:

Foo.find(params[:foo_id])
他说我应该通过强大的params获得foo_id,但我不同意。我认为强params是为了确保params中的数组不包含您未指定的键,并且对值本身不做任何处理

谁是对的

编辑,在更新记录的情况下,下面的内容是对的还是错的?因此,通过参数获取id本身,然后对属性数组使用强参数

Foo.find(params[:foo_id]).update(foo_params)

def foo_params
  params.require(:foo).permit(:attr_one, :attr_two, :attr_three)
end

你说得对。在
GET
请求中,您不需要使用强参数,因为您只是查询数据库

创建/更新记录时必须小心,如本例:

Foo.create(params[:foo]) # Someone could just pass admin:true into the params
编辑:


更新的情况也可以。当您试图通过键
:foo_id
查找记录时,参数散列中是否有额外的键并不重要。在进行大规模初始化时需要强参数(在这种情况下调用
update

谢谢您的输入。我也是这么想的。我刚刚更新了这个问题,这和我上面提到的更新一样吗?你是weilcome@RichardAE!编辑了第二个案例的答案