Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Upozornění
Důrazně nedoporučujeme používání BinaryFormatter z důvodu souvisejících bezpečnostních rizik. Stávající uživatelé by měli migrovat mimo BinaryFormatter.
Počínaje rozhraním .NET 9 už nezahrnujeme implementaci BinaryFormatter v modulu runtime. Rozhraní API jsou stále přítomna, ale jejich implementace vždy vyvolá výjimku PlatformNotSupportedException, bez ohledu na typ projektu. Proto již nastavení existujícího příznaku zpětné kompatibility nestačí k použití BinaryFormatter.
Máte dvě možnosti, jak to vyřešit:
Migrujte mimo BinaryFormatter. Důrazně doporučujeme prozkoumat možnosti, jak přestat používat BinaryFormatter kvůli souvisejícím bezpečnostním rizikům. Níže uvádíme několik možností .
Pokračujte v používání BinaryFormatter. Pokud potřebujete pokračovat v používání BinaryFormatter v .NET 9, musíte záviset na nepodporovaném prostředí System.Runtime.Serialization. Formátovací balíček NuGet, který nahrazuje vyvolání implementace.
Jaké je riziko používání BinaryFormatter?
Jakýkoli binární nebo textový deserializátor, který umožňuje vstupu nést informace o objektech, které mají být vytvořeny, představuje bezpečnostní riziko, které může nastat. Existuje běžný výčet slabosti (CWE), který popisuje problém: CWE-502 "Deserializace nedůvěryhodných dat". BinaryFormatter, zahrnutý v počáteční verzi rozhraní .NET Framework v roce 2002, je takový deserializátor. Probereme to také v průvodci zabezpečením BinaryFormater.
Vzhledem ke známým rizikům použití BinaryFormatterbyla funkce vyloučena z .NET Core 1.0. Bez jasné cesty migrace k používání něčeho bezpečnějšího vedly požadavky zákazníků k BinaryFormatter zahrnutí do .NET Core 2.0. Od té doby je tým .NET na cestě k odebrání BinaryFormatter, kdy ho pomalu vypíná ve výchozím nastavení u více typů projektů, ale uživatelům umožňuje volitelně aktivovat pomocí příznaků, pokud je to stále potřeba kvůli zpětné kompatibilitě.
Další podrobnosti o rozhodnutí najdete v oznámení BinaryFormatter o tom, že bude odstraněn v .NET 9.
Pokud dojde k BinaryFormatterproblémům způsobeným odebráním, které nejsou řešeny v této migrační příručce, zadejte problém na GitHubu na github.com/dotnet/runtime a uveďte, že problém souvisí s odebráním BinaryFormatter.
Témata migrace
Migrace mimo BinaryFormatter obvykle znamená výběr jiného serializátoru. To je ale obvykle možné jenom v případě, že řídíte producenta i příjemce zakódovaných dat. V případě, že producenta neřídíte, můžete také přejít na nové rozhraní API pro čtení BinaryFormatter datových částí bez nutnosti instancovat jakýkoli z zakódovaných typů.
Obě možnosti jsou prozkoumány níže.
Volba serializátoru
Prvním krokem při migraci z BinaryFormatter je zvolit serializátor, který se místo něj použije. V závislosti na konkrétních potřebách doporučuje tým .NET migraci na čtyři různé serializátory.
- Migrace na System.Text.Json (JSON)
- Migrace na DataContractSerializer (XML)
- Migrace na MessagePack (binární)
- Migrace na protobuf-net (binární)
Datové části pro čtení BinaryFormatter (NRBF)
Mnoho aplikací načítá a deserializuje datové části, které byly trvalé v úložišti, a není vždy možné transformovat všechny trvalé datové části předem. Další scénáře můžou zahrnovat systémy nebo služby, které přijímají data vytvořená BinaryFormatter, kde je potřeba tyto systémy migrovat nezávisle.
V těchto scénářích a dalších případech je nutné zachovat podporu čtení zadaných datových částí a přechod do nového formátu v průběhu času. Aby bylo možné tyto potřeby splnit, je nyní možné bezpečně číst datové části NRBF vytvořené pomocí BinaryFormatter bez potřeby provádění obecné a zranitelné deserializace.
Migrace aplikací Windows Forms a WPF
Aplikace Windows Forms a WPF můžou vyžadovat další změny. Další pokyny k migraci najdete v aplikacích Windows Forms, aplikacích WPF a schránce WinForms/WPF a pokyny k přetahování myší.
Migrace spravovaných prostředků (ResX)
Nejběžnější typy prostředků (například řetězce a ikony) budou fungovat bez BinaryFormatter. U vlastních typů je potřeba přidat BinaryFormatter a povolit přepínač kompatibility, viz Načítání prostředků za běhu.
Použití balíčku kompatibility
Ve scénářích, kdy nelze provést migraci BinaryFormatter mimo dobu upgradu na .NET 9, je k dispozici nepodporovaný balíček kompatibility. System.Runtime.Serialization. Balíček NuGet formátovacích nástrojů obsahuje plně funkční implementaci BinaryFormatter, včetně jeho zranitelností a rizik.
I když není podporováno a nedoporučuje se, průvodce pro použití balíčku kompatibility obsahuje podrobnosti o instalaci balíčku a povolení funkčnosti.
Upozornění
Důrazně nedoporučujeme používání BinaryFormatter z důvodu souvisejících bezpečnostních rizik. Stávající uživatelé by měli migrovat mimo BinaryFormatter.