2012-01-23 15 views
0

ちょうどCakePHPフレームワーク2.0を使い始めました。私はほとんどのドキュメントとサンプルを読んで、ブログのチュートリアルに出くわしました。CakePHPの非表示の編集フィールド

http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html#editing-posts チュートリアルの「編集ポスト」セクションで、私は彼らがポストIDを覚えている隠しフィールドを使用しているのを見ました。クライアント側の変更のためにこの悪い練習ではありませんか?

私がこれを処理する方法は、隠しフィールドを削除することです。フォームが送信されると、保存して検証する前に投稿IDをPOSTデータに追加します。これを行う正しい方法ですか?

+2

使用する投稿IDをどのように知っていますか? – JJJ

+0

さて、私は例を使って投稿の代わりにユーザーを編集しました。だから私はAuthコンポーネントからログインしたユーザのIDを取得します:$ this-> Auth-> user( 'id'); –

+0

これは、ユーザーがデータベース内の* 1つのレコードだけを編集する権限を持っている場合に最適な方法ですが、複数のレコードを編集できるときはどうなりますか? – JJJ

答えて

1

はい、データを改ざんする心配があれば、正しい方法です。 レコードが特定のユーザーに属している場合は、このユーザーが他のユーザーのレコードのidに置き換えることができないようにする必要があります。 セキュリティコンポーネントは、(少なくともいくつかの側面では)ここでは役に立ちません。

は、ここではそれについての詳細をお読みください。 http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

+0

SecurityComponentは、クライアントが隠しフィールドを変更することを許可しません。 – Wylie

+0

よろしいですか。 2.0のドキュメントでは、その新しい動作について説明しています。 – mark

+0

セキュリティコンポーネントを使用したくない場合や、セキュリティコンポーネントを使用できない場合は、上記の方法を使用することができます(隠しフィールドを使用せず、IDでもある最初のパラメータを渡します)。そうでなければ、私はワイリーの答えをお勧めします。 – mark

0

AppController :: $ components変数にSecurityComponentを追加するだけで、クライアントが隠しフィールドを変更するのを防ぐことができます。

+2

これは本当のステートメントですが、より重要な一般的な点を欠場します。 OPは、クライアント側のデータを信頼しないために正しいです。コントローラー内のすべてのアクションは、ユーザーが影響を受けるデータに対してそのアクションを実行する許可を常に与えられていることを検証してから、それを許可する必要があります。ユーザーがデータを所有していない場合、またはその上でそのような操作を実行することを許可すべきでない場合は、要求を拒否します。 – Cheekysoft

1

をSecurityComponentが隠しフィールドに役立ちます。検出された要求には隠れた入力が含まれていますが、ドロップダウン入力には何も行いません。あなたは、放火犯の一部のは、AddUserフォームが開いて割れて、オプションを追加することができます。

<option value="superadmin">SuperAdmin</option> 

「役割」のドロップダウンに変換し、フォーム上にそれを選択し、提出時に、CakePHPは新しいSuperAdminを作成します。したがって、最高のポリシーは依然としてクライアントを信頼しないことです。クライアントはtimberwolvesのパックで、サーバーはウサギのクラッチです。それらを2つに分けてください。

関連する問題