1

Railsのセキュリティについて質問があります。モデルがあり、、、などのUser役割のブール値が多数あるとします。admindirector

管理者は間違いなくフォームでこれらの値を編集したいのでattr_accessible、管理者ユーザーにこれを行わせるために使用したいと思います。

もちろん、他の用途でもユーザーモデルを編集できます。プロファイルを編集するか、新しいユーザーをシステムに招待/追加するときに使用できます。ディレクターの場合、実際にはディレクターよりも「少ない」役割を設定してもらいたいのですが、ディレクターが設定しdirectorたり、admin

ユーザーを変更するこれらのコントローラーを公開しているので、この場合は設定をattr_accessible許可directorしませんか?adminこれは非常に大きなセキュリティホールのように聞こえます。

では、アクセスを制限するための最良の方法は何ですか?

  1. 各パラメータを一度に1つずつ設定しますか?

  2. 作成/更新アクションを設定admin = falseしますか?director = false最も単純な解決策ですが、これをコントローラーに含めるのはちょっと厄介です。

  3. ifステートメントを使用して、そのユーザーロールがこれらの属性を編集して許可できるかどうかを確認しますか?

  4. before_validationまたは?などのrailsコールバックを使用しますかbefore_save

  5. 他の宣言型ソリューション?

ありがとう

4

2 に答える 2

3

Rails 3.1 の今後のリリース (現時点ではリリース候補版があります) には新しいオプションがあり、attr_accessibleこれを渡すことでコントローラー レベルでロールをオーバーライドできるロールを定義できますwithout_protection => true

ここで詳細を読むことができます: http://www.enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1

Rails セキュリティ ガイドの attr_accessible に関するセクション: http://edgeguides.rubyonrails.org/security.html#countermeasures

于 2011-05-28T14:45:14.400 に答える
0

次のいずれかが役立つ場合があります。

https://github.com/dmitry/attr_accessible_block

https://github.com/thefrontiergroup/scoped_attr_accessible

...ロールベースの条件を使用して、設定できる属性を決定できます。

于 2011-05-28T14:41:20.610 に答える