2011-01-10 9 views
0

私はRails 2.3.8アプリケーションのセキュリティ監査を行っていますが、私のモデル定義にはattr_protectedまたはattr_accessibleという不足があります。私はそれらの背後にある推論を理解しており、質量割り当てを手助けするのにwritten a gemさえあるが、私は潜在的に欠けているかもしれない属性を探している。どの項目を一括割り当てから保護する必要がありますか?

私が抱えている問題は、どのフィールドを保護するべきかを決定することです。人々がこれに一般的に従うルールはありますか?私は外部キーのような属性と管理者のようなブーリアンを考えていますか?保護するのが理にかなっています。また、STI型、多型* _type/* _idフィールドなどのフィールドについても疑問に思っています。私は、Rails 3がattributes protected by defaultを導入したのを見ましたが、Rails 2.3.8がこれを持っているとは思われません。

これに関するガイダンスをいただければ幸いです。

+0

http://railscasts.com/episodes/237-dynamic-attr-accessible – apneadiving

答えて

5

一般的には、ユーザーが変更したくない属性は保護する必要があります。

私のモデルでは、フォームのフィールドとして存在するすべての属性にattr_accessibleを使用します。他はすべて保護されています。 (私はむしろデフォルトで保護されているすべてを持っているだろう)

つまり、クライアントによって送信されたすべてのデータが悪意を持って改ざんされると仮定します。

編集:関連するブログポストhttp://www.kalzumeus.com/2010/09/22/security-lessons-learned-from-the-diaspora-launch/

+0

私はいつもattr_protectedがセキュリティ上のリスクであると感じています(何も使用していないより優れていますが)。フィールドは保護されるべきですデフォルトでは、attr_accessibleを使用するときに得られるものです。 – karmajunkie

+0

はい、私は同じように落ちました。むしろデフォルトでは安全で、必要なときに属性が書き込み可能であることを保証するテストを使用します。 –

+0

私が思っていなかったものが最も理にかなった答えであるとき、私は大好きです。ありがとう! –

0

私はすべての「潜在的に危険な」属性は、ユーザーのための管理フラグと同様に、保護される必要がありますね。

私の意見では、理想的には、すべてのモデルは、更新可能なすべての属性に対してattr_accessibleを持つ必要があります。それはより安全な解決策です。

関連する問題