Cakephp 1.3 アプリケーションを使用していますが、「データ漏洩」セキュリティ ホールに遭遇しました。うまくいくものだけでなく、ケーキを使った最善の解決策を探しています。このアプリケーションは、教師が成績を入力し、生徒が自分の成績を取得できる成績追跡システムです。すべてが期待どおりに機能していますが、セキュリティの監査を開始したときに、基本的な CRUD 操作にリークがあることがわかりました。生徒 X が生徒 Y の成績を確認できることを意味します。生徒は自分の成績のみを表示する必要があります。この質問は読み取り操作に限定します。
Cake を使用して、次のビュー関数を含む grade_controller.php ファイルを作成しました。
function view($id = null) {
// Extra, not related code removed
$this->set('grade', $this->grade->read(null, $id));
}
と
http://localhost/grade/view/5
$id=5 の生徒の成績を表示します。それは素晴らしいことです。しかし、生徒 #5 が URL を操作して 6 に変更すると、生徒 #6 の成績が表示されます。古典的なデータ漏洩セキュリティ ホール。
これを解決する最善の方法について、2 つの考えがありました。1) コントローラーで呼び出されるすべての CRUD 操作にチェックを追加できます。または 2) モデルにコードを追加して (たとえば、beforeFind() を使用)、人物 X がそのデータ要素にアクセスできるかどうかを確認します。
オプション #1 は、時間がかかり、エラーが発生しやすいようです。オプション#2が最善の方法のようです。ただし、一部の操作の前に find() を呼び出す必要がありました。上記の read() の例では beforeFind() は実行されず、 beforeRead() コールバックもありません。
提案?