私はこれを突き刺します。私たちが行ったのと同様のことを行うアプリケーションがあり、「独自のロール」を実行しました。ユーザーは、アプリケーション インターフェイスを介してファイル (画像、ドキュメントなど) をアップロードできます。これらのファイルには、ユーザー/会社/役割に応じたアクセス許可があります。いくつかのセキュリティ上の懸念を軽減するため、およびその他のいくつかの理由により、以下を実装しました。
Web アプリケーションでは、ユーザーが生成したすべてのコンテンツを格納するために使用される「Assets」フォルダーを作成しました。次に、サブフォルダーを使用してコンテンツ (ロゴ、ファイルなど) をセグメント化します。
web.config では、このフォルダーをブラウザーからアクセスできないように構成しました (App_Data または bin フォルダーのように考えてください)。ポイント#4の詳細):
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="Assets"/>
</hiddenSegments>
</requestFiltering>
</security>
ファイルがアップロードされると、ファイルに関する関連情報 (タイプ、サイズ、名前、コメント) がデータベースに保存されます。これにより、ロールとユーザーのセキュリティ情報をファイルに関連付けることもできます。
ファイルを取得するために、要求されたファイル名とユーザー情報を受け取り (ログインする必要があるため)、Assets フォルダーからファイルを返す一連のアクションを備えたコントローラーを実装しました。エンド ユーザーには、すべてのファイルが /Files/Docs/FileID などに保存されているように見えますが、実際には、これはファイル自体に対するフロントエンドの「ゲートキーパー」にすぎません。このコントローラー/アクション メソッドは、承認されていない場合、または不正なファイルを要求した場合に 404 を返します。ファイルの命名については、GUID を生成し、ファイルに「GUID.relevantExtension」という名前を付けます (存在しないことを確認します)。
学んだ教訓などについては、特にユーザーがコンテンツを共有していない場合は、ファイルを直接公開しないことが最大のポイントだと思います。また、これはおそらく個人的な好みであり、注意しないと戦争を開始する可能性があります.ページングとキャッシュのパフォーマンスに問題が発生するように思われるため、データベースにファイルを保存することはあまり得意ではありません(SQL 2008ファイル列についても話していません)。お役に立てれば!
編集-これを行うことに関する別の考え、VSから公開するときは注意してください。これらのアップロードされたファイルはソリューションの一部ではありません。アップロード タイプの公開を削除すると、ユーザー ファイルがワックス化されます。ただの注意事項(そこにいました:/)