次の方法で共有


BinaryFormatter 移行ガイド

注意事項

関連するセキュリティ リスクのため、BinaryFormatterを使用することを強くお勧めします。 既存のユーザーは、BinaryFormatterから移行する必要があります

.NET 9 以降では、ランタイムに BinaryFormatter の実装は含めなくなりました。 API はまだ存在しますが、その実装では、プロジェクトの種類に関係なく、常に PlatformNotSupportedExceptionがスローされます。 そのため、既存の下位互換性フラグを設定するだけでは、 BinaryFormatterを使用できなくなります。

この問題に対処するには、次の 2 つのオプションがあります。

BinaryFormatterを使用する場合のリスクは何ですか?

デシリアライザー (バイナリまたはテキスト) を使用して、作成するオブジェクトに関する情報を入力に伝達できるのは、発生を待機しているセキュリティ上の問題です。 CWE-502 "信頼されていないデータの逆シリアル化" という問題を説明する一般的な弱点列挙 (CWE) があります。 BinaryFormatterは、2002 年の .NET Framework の最初のリリースに含まれており、このようなデシリアライザーです。 これは、 BinaryFormater セキュリティ ガイドでも説明します。

BinaryFormatterを使用する既知のリスクにより、この機能は .NET Core 1.0 から除外されました。 しかし、より安全なものを使用するための明確な移行パスがなければ、お客様の需要により、 BinaryFormatter が .NET Core 2.0 に含まれるようになります。 それ以来、.NET チームは BinaryFormatterを削除するパスに進み、複数のプロジェクトの種類で既定でゆっくりとオフになっていますが、下位互換性のために必要な場合は、コンシューマーがフラグを使用してオプトインできます。

決定の詳細については、.NET 9 のお知らせで削除されるBinaryFormatterを参照してください。

この移行ガイドで対処されていない BinaryFormatterの削除に関連する問題が発生した場合は、github.com/dotnet/runtime で問題 提出し、問題が BinaryFormatterの削除に関連していることを示してください。

移行に関するトピック

通常、 BinaryFormatter から移行することは 、別のシリアライザーを選択することを意味します。 ただし、これは通常、エンコードされたデータのプロデューサーとコンシューマーの両方を制御する場合にのみ実行できます。 プロデューサーを制御しない場合は、エンコードされた型をインスタンス化せずに 、 BinaryFormatter ペイロードを読み取るために新しい API に移動することもできます。

両方のオプションを次に示します。

シリアライザーを選択する

BinaryFormatterから移行する最初の手順は、その場所で使用するシリアライザーを選択することです。 .NET チームは、特定のニーズに応じて、4 つの異なるシリアライザーへの移行を推奨します。

BinaryFormatter (NRBF) ペイロードを読み取る

多くのアプリケーションでは、ストレージに永続化されているペイロードを読み込んで逆シリアル化します。また、保存されているすべてのペイロードを事前に変換できるわけではありません。 その他のシナリオには、 BinaryFormatterによって生成されたデータを受け取るシステムまたはサービスが含まれる場合があり、これらのシステムを個別に移行する必要があります。

これらのシナリオや他のシナリオでは、提供されたペイロードを読み取り、時間の経過と同時に新しい形式に移行するためのサポートを保持する必要があります。 これらのニーズを満たすために、汎用および脆弱な逆シリアル化を実行することなく、BinaryFormatterで作成された NRBF ペイロードを安全に読み取ることができるようになりました。

Windows フォームと WPF アプリケーションを移行する

Windows フォームおよび WPF アプリケーションでは、追加の変更が必要になる場合があります。 さらに移行ガイダンスについては、 Windows フォーム アプリWPF アプリWinForms/WPF クリップボードとドラッグ アンド ドロップのガイダンス を参照してください。

マネージド リソースの移行 (ResX)

最も一般的なリソースの種類 (文字列やアイコンなど) は、 BinaryFormatterなしで動作します。 カスタム型の場合は、 BinaryFormatter を取り込み、互換性スイッチを有効にする必要があります。 実行時のリソースの読み込みを参照してください。

互換性パッケージを使用する

.NET 9 へのアップグレード時に BinaryFormatter から移行できないシナリオでは、サポートされていない互換性パッケージを使用できます。 System.Runtime.Serialization。フォーマッタ NuGet パッケージには、その脆弱性やリスクを含む、BinaryFormatterの機能する実装が含まれています。

サポートされていませんが、推奨されませんが、互換性パッケージを使用するためのガイドには、パッケージのインストールと機能の有効化に関する詳細が含まれています。

注意事項

関連するセキュリティ リスクのため、BinaryFormatterを使用することを強くお勧めします。 既存のユーザーは、BinaryFormatterから移行する必要があります