2

ASP.NET MVC4 を使用してサイトを作成しています。サイトの機能の 1 つは、ユーザーが画像をアップロードすることです。画像は個人的な性質のものである可能性があり、ほぼ間違いなく子供の画像が含まれています.

画像は、メタデータと共に MS Azure SQL データベースに保存されています。Azure で帯域幅の使用を節約するために、イメージがダウンロードされると、ユーザー ディレクトリに保存されます。

~/UserImages/<Username>/<Image>

ギャラリー ページが読み込まれると、コントローラ アクションはユーザー ディレクトリにあるものに対してデータベースをチェックし、まだそこにないものを削除します。

ディレクトリの<Username>一部は、必要に応じてコントローラによって作成されるため、IIS 権限を設定できません。しかし、たとえ私がそうだったとしても、ユーザーが事前に知られていないため (新規登録など)、IIS で何ができるかわかりません。

MVC ルーティングにより、ユーザーがユーザー名を推測して他のユーザーのディレクトリにアクセスすることはできませんが、ユーザー名とイメージ名を推測できる場合は表示されます。他人の画像が他人に公開される可能性を最小限に抑えるために、それを防ぐためのアイデアを探しています.

を試しましたIgnoreRouteが、これはうまくいきませんでした。

routes.IgnoreRoute("UserImages/{*pathInfo}");

理想的には、ログアウト時に UserImages ディレクトリをクリアする必要がありますが、誰もがログアウト コマンドを使用するわけではありません。それらがクリアされた場合、ファイルが削除される前にユーザー名とイメージ名の組み合わせが見つかる可能性ははるかに低くなります。

4

1 に答える 1

1

キャッシュされた画像を IIS によって供給される静的コンテンツとして実際のサイト構造に保存する代わりに、画像をサイト外のパスに保存するのはどうでしょうか。

これにより、権限のないユーザーが直接アクセスできないようになります。

次に、要求されている画像が現在のユーザーがアクセスできるものであることを検証できるController(UserImagesControllerおそらく) アクションを介して、これらの画像へのアクセスを提供できます。

チェックUserNameは、アクションの要求されたパラメーターが現在のユーザーのものと同じであることを確認するのと同じくらい簡単になる場合がありますUserName

このアプローチでは、これらのイメージのキャッシュ ヘッダー、有効期限なども制御できます。

于 2013-07-28T23:20:05.583 に答える