0

Rails 3 では、アクセス可能な属性を定義できます。

attr_accessible :rating, :review

このモデルには、user_id偽造/ハッキングを防ぐために保護された追加機能があります。この値はコントローラーで割り当てられます。

@review.user_id = current_user.id

Firebug を使用して を手動で含めるとuser_id、 の一部になりますが、params[:review]user_idで定義されてattr_accessibleいないため、データベースには保存されません。そのような場合はむしろ安全です。

質問1

私はRails 3のアクションブックを読みました.Yehuda Katzは、.deleteさらなるアクションが実行される前に不正なパラメータを削除する方法を含めparams[:review].delete(:user_id)ました. アプリをさらに保護するためにこれも含める必要がありますか、それともこの手順を無視する必要がありますか?

質問2

.delete_all_except上記のメソッドを含める必要がある場合は、params で許可されている属性にストリップするだけのようなものが必要です。それ、どうやったら出来るの?

ありがとう。

4

1 に答える 1

1

有効にすると、Rails 3.2 は、追加の質量代入パラメーターがモデルに送信された場合に例外を通過します。

config/application.rb

config.active_record.whitelist_attributes = true

不要なパラメーターを削除するのではなく、必要なパラメーターのみを受け入れることをお勧めします。

@user.update_attributes params[:user].slice(:rating, :review)

これは、許可したユーザー パラメータのみを返します。

注: Rails 4 (近日公開予定) では、この動作はstrong-parametersという名前の DSL で実装されています。この gem を Rails 3.2 にインストールして、今すぐ実装できます。

@user.update_attributes params.require(:user).permit(:rating, :review)
于 2012-09-18T15:24:26.503 に答える