8

編集:

DCoderからより多くの情報を受け取った後、私がここで探していたフレーズは「大量割り当ての脆弱性」です。つまり、初期フォームに存在するかどうかに関係なく、すべての有効なフィールドをデータベースに保存するメソッドの利便性を利用します(意図したフィールドよりも多くの[おそらくより重要な]フィールドを含む操作されたPOSTデータに対して脆弱になります) )。

次に、2つの一般的な応答は、ホワイトリストとブラックリストに適切に名前が付けられます。変更を目的としたフィールドをホワイトリストに登録するか、変更してはならないフィールドをブラックリストに登録します。

次に、私の質問は次のとおりです。CakePHPは、送信フォームのフィールドのみを自動的にホワイトリストに登録しますか、それとも私(および他のCakeファン)が適切にホワイトリストに登録またはブラックリストに登録するように注意する必要がありますか?


元の質問:

Cakeは、フォームを生成してほぼ自動的に処理するための多くの優れた方法を提供します。セキュリティについて考えていたとき、Cakeは送信されたフォームにどのフィールドが存在するかを認識しているのでしょうか、それとも単に有効なフィールドを受け入れるのでしょうか。私が意味をなさない場合は、次のシナリオを採用してください(そして、誰かが私の質問を編集して、より良い表現方法を考えられる場合は、より適切な表現にすることができます):

ユーザーにプロファイルの編集を許可するとします。アクションの下に、ユーザー名、電子メール、およびパスワードのフィールドを持つフォームを作成しますedit

賢いユーザーは、is_adminフィールドをからfalseに変更したいので、firebugなどのアプリを使用して、に設定されたフィールドを含むtrueカスタム投稿データをアクションに送信します。editis_admintrue

問題は、Cakeがそれ自体でis_admin元の形式ではなかったことに気付くのでしょうか、それとも、特定のアクションで変更できるフィールドのみを明示的に指定するように注意する必要があるのでしょうか。もっと簡単な方法はありますか?

ありがとうございました!

ジェームズ

4

2 に答える 2

4

コントローラにをロードする必要がありSecurityComponentます。CakePHPはフォームの改ざんを防ぎます。http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html#form-tamperingを参照してください。 -防止

于 2012-05-05T05:26:11.743 に答える
-2

CakePHPには、利用可能な検証オプションが組み込まれています。フォームは自動的にフィールドを生成し、モデルで指定した検証基準に基づいて検証を行います。この検証は、Saveメソッドの前に自動的に呼び出されます。

また、カスタム検証を追加する場合は、それをモデルに追加できます。

特定のクエリを使用is_adminして、編集フォームからフィールドを削除し、ユーザーが編集できないようにすることができます。セキュリティを強化し、is_adminフィールドの値がfalseであることを確認する場合は、コントローラーの編集メソッドでその値を編集できます。

editメソッドでは、保存アクションを呼び出す前に次のコードを追加できます。
$this->request->data['ModelName']['is_admin] = false;

于 2012-05-05T04:13:23.183 に答える