0

我已添加此修复程序https://gist.github.com/2382288以保护所有字段免受 mongoid 应用程序中的大规模分配。

在我的config/initializers/mongoid.rb我添加了这个修复:

module Mongoid
  module MassAssignmentSecurity
    extend ActiveSupport::Concern

    included do
      attr_accessible nil
    end
  end

  module Document
    include MassAssignmentSecurity
  end
end

我的问题是:

此修复完全保护您的应用程序免受攻击批量分配?

还是建议 attr_accessible 在每个模型中添加所有属性?

4

4 回答 4

1

创建一个自动加载文件和以下内容:

module Mongoid
  module MassAssignmentSecurity
    extend ActiveSupport::Concern

    included do
      attr_accessible(nil)
      self.mass_assignment_sanitizer = :strict
    end
  end

  module Document
    include MassAssignmentSecurity
  end
end

执行上述操作将导致适当的加薪,就像您使用 ActiveRecord 一样:

jordon@envygeeks:~/development/gryffindor$ rails c
Loading development environment (Rails 3.2.6)

[1] pry(main)> Page.new => #<Page _id: RANDOM_ID, _type: "Page", content: nil>
[2] pry(main)> Page.new(t: 't') => ActiveModel::MassAssignmentSecurity::Error

如果没有对代码进行上述修复,您将只会收到缺少方法的 raises,这是毫无价值的,因为它是一个一般异常,甚至不会将您的应用程序指向正确的方向。

于 2012-07-14T15:41:56.133 回答
1

我建议尝试 strong_parameters gem https://github.com/rails/strong_parameters http://railscasts.com/episodes/371-strong-parameters (观看本集需要订阅)

strong_parameters 将包含(并且是默认值)在 rails 4 中。它已经合并到 rails 中。我在我的一个项目中使用了这个 gem,与 attr_accessible 相比,它提供了很大的灵活性。

于 2012-10-07T07:11:52.077 回答
0

这将使所有 Mongoid::Documents 默认不接受任何字段进行批量分配。这可能不是您想要的,因为您将无法@model.update(params[:model)

您几乎肯定会想要进入文档并添加:

attr_accessible :first_name, :last_name
于 2012-06-26T15:02:38.367 回答
0

此修复完全保护您的应用程序免受攻击批量分配?

是的,这将防止对任何字段进行批量分配,并且在安全应用程序中是正确的默认设置。

还是建议在每个模型中添加 attr_accessible 的所有属性?

不是"or"而是"and"。您应该使用建议的代码默认值,强制所有文档使用白名单。然后在每个文档中明确声明哪些字段应该可以通过 attr_accessible 语句的批量赋值访问。

于 2012-10-07T01:24:07.427 回答