2

私は、Rails とオブジェクト指向プログラミングの最初のステップを実行しています。私が理解したい非常に根本的なことがあります: なぜattr_accessibleモデル内で必要なのですか?

ハッカーが大量割り当てを使用してデータベース エントリを変更し、セキュリティを強化できることを読んだことがあります。そのため、機密フィールドを保護する必要があります (atribute_protectedこの場合は使用)。

attr_accessibleの反対ですかatribute_protected?もしそうなら、どのフィールドがアクセス可能で、どのフィールドがそうでないかを述べる必要があるのはなぜですか? これらのフィールドはデフォルトでアクセスできませんか? そして、何attr_accessorのために使われますか?

一部のフィールドをアクセス可能にしないと、アプリケーションが実行されないことに気付きました。:password_digest や :admin などの機密フィールドに attr_acessible を使用できますか?

誰かが私にそれを説明できたら素晴らしいだろう.

万歳、TimmyOnRails

4

1 に答える 1

3

ここにはいくつかの概念が混在しているので、それらを解きほぐしてみます。

attr_accessor読み書き可能な属性を設定するためのものです。と言うのattr_readerと同じですattr_writer。あなたの質問は に関するものではないので、Accessorsattr_accessorのこのリンクをチェックしてください。


Rails docs によると: attr_accessibleattr_protected マクロの反対です

これらの方法が Mass Assignment の脆弱性を防ぐために使用されていることは間違いありません。

  • attr_accessible一括代入で設定できる属性を示します。
  • attr_protected一括代入で設定できない属性を示します。

それでは、それぞれのユースケースは何ですか?あるケースでは、すべての属性を宣言する必要があるようにするグローバル構成オプションを設定できますattr_accessible

config.active_record.whitelist_attributes = true

その場合、attr_accessible頻繁に使用します。

そしてattr_protected?反対に、false属性をホワイトリストに登録することについて述べた場合、どの属性を一括割り当て可能にしてはならないかをどのように宣言しますか? attr_protectedあなたが正しいと言ったら!:D

通常、攻撃者が侵入して権限を管理者ロールに昇格させたくないため、:adminasのようなフィールドを設定する必要があります。attr_protected

一括割り当ては、簡単に正しく行えるものではありません。大規模で賢明な開発チームは、これを誤解しています。注意深く調べて、何が起こっているのかを理解してください。

于 2012-09-19T02:53:58.673 に答える