1

、およびSecretの 3 つのフィールドを持つモデルがあります。 ユーザーがとのみを入力できるフォームがあります。違います。 新しいオブジェクトに値を渡す最良の方法は何ですか?f1f2f3
f1f2f3

と書く@secret = Secret.new(params[:secret])と、悪意のあるユーザーが私のモデルにパスf3する可能性があり、モデルに保存されます。

ユーザーが余分な値を渡さないようにする最善の方法は何ですか?

http://guides.rubyonrails.org/security.html#mass-assignmentを読みましたが、3 つのバリエーションがあります:
1) ブラックリスト ( attr_protected :f3)
2) ホワイトリスト ( attr_accessible :f1, :f2) 3) グローバル ホワイトリスト (構成行による
強制)attr_accessibleconfig.active_record.whitelist_attributes = true

どのような方法が最適ですか?

4

1 に答える 1

2

最も偏執的な (したがって最良の) 設定は、 とattr_accessible :f1, :f2組み合わされconfig.active_record.whitelist_attributes = trueます。

後で (移行を追加することによって) 新しい属性を追加する場合は、一括割り当てのために新しい属性を積極的に有効にする必要があります。禁止されているものだけをブラックリストに登録すると、新しい属性をブラックリストに追加するのを忘れる可能性があります。ホワイトリストを使用する場合、これは発生しません。

于 2012-08-09T22:47:06.933 に答える