C# (または外部ライブラリ) に、ファイルが JPG/PNG であることを確認できるメソッドはありますか?そうでない場合、エラーがスローされますか?
かもしれませんが、それ自体はあまり役に立ちません。有効な画像形式であり、IE のコンテンツ スニッフィングが遭遇するアクティブな HTML/スクリプト コンテンツを含むファイルを簡単に作成できます。または、懸念すべき壊れた Java および Flash オリジン ポリシーがあります。これは、サーバーのセキュリティ コンテキストへのスクリプト作成と同じ影響を与える可能性があります。
画像を処理 (切り抜き、サイズ変更など) して再保存すると、コンテンツ密輸攻撃を実行することが非常に困難になります。ただし、画像処理ライブラリの脆弱性によりサーバー側の悪用にさらされる可能性があるため、サーバー側のツールが常に最新であることを確認する必要があります。
それができない場合、すべてのコンテンツ インジェクションの問題を緩和するための最善の策は、機密性の高い資格情報 (Cookie、基本認証) のいずれにもアクセスできない別の [サブ] ドメインから画像を提供することです。メインサイトの.
この目的で などのサブドメインを使用している場合images.example.com
、メイン サイトには からのみwww.example.com
アクセスでき、からはアクセスできません example.com
。そうしないと、挿入されたコンテンツが IEimages.example.com
の Cookie にアクセスできます。一般に、望ましくない Cookie の漏えいを防ぐために 301 リダイレクトする必要があります。example.com
example.com
www.example.com
応答にヘッダーX-Content-Type-Options: nosniff
を追加して、IE8 からのコンテンツ スマグリング攻撃をブロックします。(残念ながら、以前のバージョンでは役に立ちません。)
また:
ユーザーが指定したファイル名をサニタイズするのは困難です。特に、使用可能なファイル名に関するルールが実際に複雑な Windows サーバーでアプリが実行されている可能性がある場合はなおさらです。開始するのに適した場所は、英数字のみを許可し、独自のファイル拡張子とプレフィックスを追加することです。(Windows で予約されているファイル名と空のファイル名を避けるために、プレフィックスが必要です。)
より良い: 実際のファイル名として使用する代わりに、ユーザーが指定したファイル名をデータベースに保存します。
ファイルアップロードのセキュリティ問題の詳細については、この質問を参照してください。