相关疑难解决方法(0)

Rails安全性:完全避免批量分配

我倾向于不需要生产代码中的质量分配功能.(在我的测试代码中,我经常使用它,但在这些情况下,我确实想要设置任意列.)

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

Article.new(params[:article])  # or create
article.attributes = params[:article]
article.update_attributes(params[:article])
Run Code Online (Sandbox Code Playgroud)

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

Article.new(:title => params[:article][:title], :body => params[:article][:body], ...)
Run Code Online (Sandbox Code Playgroud)

我是否从质量分配安全问题中解脱出来(即使不使用attr_accessible/ attr_protected)?

编辑:我不只是禁用批量分配的原因是,我希望能够写Article.create!(:blog_id => @blog.id, ...),其中blog_id是一个"unsave"属性.

security activerecord ruby-on-rails

3
推荐指数
1
解决办法
2606
查看次数

Ruby - 忽略受保护的属性

如何告诉Ruby(Rails)忽略大规模分配时存在的受保护变量?

class MyClass < ActiveRecord::Base
    attr_accessible :name, :age
end
Run Code Online (Sandbox Code Playgroud)

现在我将批量分配一个哈希来创建一个新的MyClass.

MyClass.create!({:name => "John", :age => 25, :id => 2})
Run Code Online (Sandbox Code Playgroud)

这会给我一个例外:

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: id
Run Code Online (Sandbox Code Playgroud)

我希望它MyClass使用指定的(不受保护的)属性创建一个新的并忽略该id属性.

旁注:我怎样才能忽略未知属性.例如,MyClass没有location属性.如果我尝试批量分配它,只需忽略它.

ruby ruby-on-rails rails-activerecord

1
推荐指数
1
解决办法
1009
查看次数