私は、次の原則に基づいて CakePHP サイトをいじっています。
- 管理者は、画像をアップロードしてモデルにタグを付けることができます。
- 管理者は、ポートフォリオを公開するために、特定の写真を公開することを選択できます。
- 管理者は、ユーザーを特定のモデルに関連付ける登録キーを使用して、サイトに参加するように人々を招待できます。ユーザーは、ログインが必要なサイトのプライベート部分で、個々のモデルごとのプライベートポートフォリオのようなもので、自分のすべての写真を見ることができます.
- すべての画像は、
deny from all
.htaccess ファイルがアクセスをブロックするフォルダーに配置されます。 - メディア コントローラーが画像の提供を処理し、ファイルの要求が行われると、データベース テーブルの検索が行われ、次の場合にアクセスが許可されます。ユーザーがログインし、管理者である。ユーザーはログインしており、写真にタグ付けされています。または写真の公開としてマークされています。そうでない場合は、ステータス コード 403 が返されます。
- 全体のエクスペリエンスをよりスムーズにし、不要なダウンロードを回避するために、ファイルの編集タイムスタンプがチェックされ、対応するステータス コード
304
が送信されるキャッシュが使用されます ($this->response->modified
ファイル タイムスタンプへの設定と$this->response->checkNotModified($this->request)
リクエストのチェックを通じて)。 - 画像は
$this->response->file
コントローラーの経由で送信されMediaController
ます。
全体として、これは期待どおりに機能しますが、問題が 1 つあります。公開されるべきではない写真が何らかの理由でエラーによって公開された場合、キャッシュが問題を引き起こします。
ファイルへのアクセス権を持っている人がログインし、期待どおりに写真を表示/ダウンロードできるとします。その後、このユーザーはログオフし、他の誰かが PC を引き継ぎます。彼らは、同じプライベート写真が何らかのエラー (基本的にはバグまたは人間の管理者のエラー) によって公開されている公開ポートフォリオ ページに移動しますが、ログインした最後のユーザーがその写真にアクセスできたため、それはキャッシュにあり、サーバーが のステータス コードを返すと403
、ブラウザはそれを無視し、キャッシュから画像を提供します。
私があなたを失っていない場合、私の質問はこれです: この問題を回避する方法はありますか? ブラウザに 403 ステータス コードを考慮させることはできますか? または、メディア コントローラのセットアップ/設計に、使用できない他の欠陥がありますか?
それとも、この問題は、小さなアマチュア写真家にとって問題になる可能性が低すぎるのでしょうか? 有名なプロの写真家にとって、(重大な) セキュリティ上の欠陥と見なされるでしょうか?
どんな洞察も大歓迎です!:)