8

クライアントのアプリケーションの一括割り当ての脆弱性をいくつか修正しています。Rails が保護された属性の一括割り当ての試行を黙って破棄しないようにしたいと考えています。代わりに、調査できるように例外をスローしたいと考えています。

つまり、これが通常ログに表示されるときはいつでも:

WARNING: Can't mass-assign these protected attributes: ...

代わりに (または追加で) 例外をスローしたい

編集: Rails 2.3.4を使用しています

4

1 に答える 1

10

これを行うには、Rails のモンキー パッチを適用する必要があります。ただし、ユーザーが一括割り当てを試みた場合にアプリでエラーが発生しないようにするため、このコードは開発および/またはテストでのみ使用してください。に次を追加しますconfig/initializers/error_mass_assign.rb

module ActiveModel
  module MassAssignmentSecurity
    module Sanitizer
    protected
      def warn!(attrs)
        self.logger.debug "WARNING: Can't mass-assign protected attributes: #{attrs.join(', ')}" if self.logger
        raise(RuntimeError, "Mass assignment error") if ['test', 'development'].include?(Rails.env)
      end
    end
  end
end

これにより、通常の警告が発生しますが、テストおよび開発環境で保護された属性が一括割り当てされると、「一括割り当てエラー」というメッセージとともに RuntimeError も発生します。別の例外が必要な場合は、上記のコードのエラー メッセージまたはエラーを変更することもできます。

これを有効にするには、必ずコンソールまたはサーバーを再起動してください。

PS: Rails 2 では、次のことを行う必要があります。

module ActiveRecord
  class Base
    def log_protected_attribute_removal(*attributes)
      logger.debug "WARNING: Can't mass-assign these protected attributes: #{attributes.join(', ')}"
      raise(RuntimeError, "Mass assignment error")
    end
  end
end
于 2011-04-05T21:23:39.803 に答える