在我的生产代码中,我倾向于不需要mass-assignment功能。(在我的测试代码中,我经常使用它,但在这些情况下,我确实希望设置任意列。)
因此,如果在我的生产代码中,我只需避免使用以下表单:
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
,我是否免于大规模分配安全问题的影响?
编辑:我不仅仅是禁用大规模分配,我还想能够编写 Article.create!(:blog_id => @blog.id, ...)
,其中blog_id是一个“不安全”的属性。
User.create!(:name => 'J. R. Hacker', :admin => true)
。我的问题是,如果我没有全局禁用批量赋值,我还安全吗? - Jo Lissa = Article.new; a.blog_id = blog.id; ...; a.save!
。我更愿意写Article.create!(blog_id => blog.id, ...)
-- 但是只有在不安全的属性(如blog_id)上开放大规模分配,我才能这样做。所以我想知道这是否完全安全(只要我避免传递受污染的哈希)。 - Jo Lissattr_protected
,所有属性都可以被批量赋值,除了那些被标记为受保护的属性。 - Zabba