0

私はレールにかなり慣れておらず、他の人のコードを見ています。create()を使用してモデルオブジェクトのインスタンスを作成しようとすると、一括割り当てを使用してモデルオブジェクトを作成できないというエラーが表示されることに気付きました。オブジェクト作成での一括割り当てに関連する危険性を認識しています。ただし、これは、私が参照として使用しているソースの一部では必要ないようです。これはRails3.2.7の新機能ですか?それとも私は何か間違ったことをしていますか?

したがって、「Person」というモデルがあり、新しいモデルを作成したい場合は、次のようにします。

person = Person.create(:first_name => "Some", :last_name => "Dude") #throws exception

私がやっていることは、これをPersonクラス定義に追加することです。

attr_accessible :first_name, :last_name

person = Person.create(:first_name => "Some", :last_name => "Dude") #now this is OK

各モデルクラスでアクセス可能な属性を定義するのは正しい方法ですか?

ありがとう!

4

2 に答える 2

3

Rails 3.2以降、application.rbに新しい構成設定があります。

config.active_record.whitelist_attributes = true

これが本質的に行っていることは、無罪(ホワイトリストに登録)されていることが証明されるまで、すべてのモデル属性が有罪であると想定することです。これがtrueに設定されている場合は、次のいずれかの方法で特定の属性を明示的にホワイトリストに登録する必要があります。

  1. attr_accessibleとして含めることにより、脆弱性のない「安全な」属性をホワイトリストに登録します。
  2. ハッカーに直接アクセスさせたくない安全でない属性を明示的にブラックリストに登録します。これは、ブラックリストに登録されていないすべての属性が安全であることを前提としています。

通常、この構成設定をtrueに維持し、属性を明示的にホワイトリストに登録して、アプリケーションがハッカーに対して脆弱なままにならないようにすることをお勧めします。

推奨されるアプローチを採用する理由の詳細については、 http://railspikes.com/2008/9/22/is-your-rails-application-safe-from-mass-assignmentを参照してください。

于 2012-10-21T03:32:36.890 に答える
2

これは、セキュリティのアップグレードにより、rails3.2で新しく追加されました。あなたはハッカーが割り当てを愛することでもっと学ぶことができます

attr_accessible :first_name,  :last_name

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

于 2012-10-21T03:21:53.623 に答える