私は Cakephp 2.1 を使用しており、表示、編集、削除などのアクションをいくつか書きました。URL では、「view/1」、「edit/1」、「delete/1」のように見えるので、URL の ID を変更できます。URLで変更したくないので、IDの編集を許可しないでください。それをするのを手伝ってください。作品がより評価されます。
1 に答える
OK...あなたの質問は理解できたと思います。URLに表示されているIDを編集できるとしたら、セキュリティ上の脅威になるのではないかと心配しています。
まず、アクションを表示します。
ユーザーがその特定のIDでレコードを表示する権限を持っているかどうかをサーバー側で確認する必要があります。そうでない場合は、エラーを出すことができます。もしそうなら、彼らにそれを見せてもらいましょう-彼らがURLのIDを編集したかどうかにかかわらず、彼らがそこにたどり着いた方法について心配する必要はありません。レコードを表示する権限がある場合は、レコードを表示するように許可します。
次に、アクションを削除します。
繰り返しになりますが、ビューアクションと同様に、サーバー側でユーザーがレコードを削除する権限を持っているかどうかを確認する必要があります。もしそうなら、それを削除させてください!URLのIDを編集しても心配しないでください。ユーザーがレコードを削除する権限を持っていない場合、URLのIDを編集した場合でも、サーバー側のチェックによってユーザーは停止されます。
第三に、アクションを編集します。
これは少し複雑ですが、それでもかなり簡単です。HTMLフォームを使用してレコードを編集し、POSTを介して送信していると仮定します。OK、URLのIDによって、フェッチして編集するレコードが決まります。表示と削除の場合と同様に、サーバー側のチェックを実行して、ユーザーがそのアイテムを編集する権限を持っていることを確認する必要があります。許可がある場合は、フォームを返送してください。
フォームが読み込まれると、ブラウザに表示されるURLは重要ではなくなります。フォームが送信するURL、およびフォームが送信するデータは重要です。現在、デフォルトでは、編集フォームはIDを非表示の入力フィールドに保存します。ユーザーはそのIDを変更し、それによって編集中のレコードを変更できます。
これを防ぐには、CakePHPのセキュリティコンポーネントを使用します。コンポーネントを含めるだけで、CakePHPはフォームが読み込まれると自動的にハッシュを作成し、フォームが送信されると再度チェックします。ユーザーが非表示の入力フィールドを編集した場合、このチェックは失敗し、CakePHPは編集を続行できません。
このようにセキュリティコンポーネントを使用するには、CakePHPのフォームヘルパー(おそらくすでに使用している)を使用してフォームを作成する必要があることに注意してください。
そして最後の注意点...データベース内のIDを誰かが見ていることに少し偏執的である場合があります。したがって、URLやその他の場所にIDを表示したくない場合があります。しかし、ほとんどの場合、IDについての「秘密」はまったくありません。誰がそれらを見るかは関係ありません。それらはすべて、アプリケーションとデータベースがレコードを識別するための手段です。アプリケーションが安全である限り、すべてのIDを全世界に表示でき、心配する必要はありません。