C# で画像ファイルを検証する
ファイルから画像を読み込むときは、潜在的なエラーやセキュリティを防ぐために、その信頼性と整合性を検証することが重要です脆弱性。この記事では、画像ファイルをメモリに完全に読み込む前に検証する問題について説明します。
この問題は、「image.jpg」などの画像ファイルが実際には JPG 形式でない場合に発生します。これにより、Image.FromFile(filePath) などの画像読み込み関数を使用して画像が処理されるときに、OutOfMemory Exception などの例外が発生する可能性があります。
解決策は、ファイル パスを指定して画像を検証できる関数を使用することです。またはストリーム。関数プロトタイプの例は次のとおりです。
bool IsValidImage(string fileName); bool IsValidImage(Stream imageStream);
この関数を実装するには、バイト パターンを利用して画像形式を識別します。 C# コードの例を次に示します。
public enum ImageFormat { bmp, jpeg, gif, tiff, png, unknown } public static ImageFormat GetImageFormat(byte[] bytes) { // Byte patterns for different image formats var bmp = Encoding.ASCII.GetBytes("BM"); // BMP var gif = Encoding.ASCII.GetBytes("GIF"); // GIF var png = new byte[] { 137, 80, 78, 71 }; // PNG var tiff = new byte[] { 73, 73, 42 }; // TIFF var tiff2 = new byte[] { 77, 77, 42 }; // TIFF var jpeg = new byte[] { 255, 216, 255, 224 }; // jpeg var jpeg2 = new byte[] { 255, 216, 255, 225 }; // jpeg canon // Check byte sequences to determine image format if (bmp.SequenceEqual(bytes.Take(bmp.Length))) return ImageFormat.bmp; if (gif.SequenceEqual(bytes.Take(gif.Length))) return ImageFormat.gif; if (png.SequenceEqual(bytes.Take(png.Length))) return ImageFormat.png; if (tiff.SequenceEqual(bytes.Take(tiff.Length))) return ImageFormat.tiff; if (tiff2.SequenceEqual(bytes.Take(tiff2.Length))) return ImageFormat.tiff; if (jpeg.SequenceEqual(bytes.Take(jpeg.Length))) return ImageFormat.jpeg; if (jpeg2.SequenceEqual(bytes.Take(jpeg2.Length))) return ImageFormat.jpeg; return ImageFormat.unknown; }
この関数を使用すると、イメージが完全にロードされる前にその有効性をチェックでき、無効なイメージや破損したイメージが適切に処理されるようにすることができます。
以上がC# でイメージ ファイルをメモリに読み込む前に検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。