Rails 安全:完全避免大规模分配

2024-05-18

我倾向于不需要批量分配 http://guides.rubyonrails.org/security.html#mass-assignment我的生产代码中的功能。 (在我的测试代码中,我经常使用它,但在这些情况下我do想要设置任意列。)

因此,如果在我的生产代码中,我只是避免这些形式:

Article.new(params[:article])  # or create
article.attributes = params[:article]
article.update_attributes(params[:article])

而总是手动枚举所有属性,如下所示:

Article.new(:title => params[:article][:title], :body => params[:article][:body], ...)

我是否可以避免批量分配安全问题(即使不使用attr_accessible/attr_protected)?

Edit:我不只是禁用批量分配的原因是,我希望能够写Article.create!(:blog_id => @blog.id, ...),其中 blog_id 是“未保存”属性。


是的,使用第二种方法,您可以避免用户分配给其他属性。

不过,这是一种比较干燥的写法:

Article.new(params[:article].slice(:title, :body))

-or-

def article_params
  params[:article].slice(:title, :body)
end

Article.new(article_params)  # or create
article.attributes = article_params
article.update_attributes(article_params)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 安全:完全避免大规模分配 的相关文章

随机推荐