0

この修正を追加しましたhttps://gist.github.com/2382288モンゴイドアプリでの一括割り当てからすべてのフィールドを保護します。

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

autoload ファイルと以下を作成します。

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

コードに上記の修正を加えないと、メソッドの不足している昇給のみを受け取ります。これは、アプリケーションを正しい方向に向けることさえできない一般的な例外であるため、価値がありません。

于 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 にマージされています。プロジェクトの 1 つでこの gem を使用していますが、attr_accessible に比べて非常に柔軟です。

于 2012-10-07T07:11:52.077 に答える
0

これにより、デフォルトですべての Mongoid::Document が一括代入のフィールドを受け入れなくなります。あなたができないので、これはおそらくあなたが望むものではありません@model.update(params[:model)

ほとんどの場合、ドキュメントに移動して次を追加する必要があります。

attr_accessible :first_name, :last_name
于 2012-06-26T15:02:38.367 に答える
0

この修正により、大量割り当て攻撃からアプリケーションが完全に保護されますか?

はい、これにより任意のフィールドへの一括割り当てが防止され、安全なアプリケーションでは正しいデフォルトです。

または、各モデルのすべての属性に attr_accessible を追加することをお勧めしますか?

「または」ではなく「そして」。すべてのドキュメントでホワイト リストを使用することを強制する、推奨されるコード デフォルトを使用する必要があります。次に、すべてのドキュメントで、 attr_acessible ステートメントを介した一括割り当てによってどのフィールドにアクセスできるようにするかを明示的に指定します。

于 2012-10-07T01:24:07.427 に答える