Dela via


BinaryFormatter migreringsguide

Försiktighet

Vi rekommenderar starkt att du inte använder BinaryFormatter på grund av de tillhörande säkerhetsriskerna. Befintliga användare bör migrera bort från BinaryFormatter.

Från och med .NET 9 inkluderar vi inte längre en implementering av BinaryFormatter i körtiden. API:erna finns fortfarande, men implementeringen genererar alltid en PlatformNotSupportedException, oavsett projekttyp. Därför räcker det inte längre att ange den befintliga bakåtkompatibilitetsflaggan för att använda BinaryFormatter.

Du har två alternativ för att åtgärda detta:

Vad är risken med att använda BinaryFormatter?

Alla deserialiserare, binärfiler eller text som gör att dess indata kan innehålla information om de objekt som ska skapas är ett säkerhetsproblem som väntar på att inträffa. Det finns en vanlig svaghetsuppräkning (CWE) som beskriver problemet: CWE-502 "Deserialisering av ej betrodda data". BinaryFormatter, som ingår i den första versionen av .NET Framework 2002, är en sådan deserialiserare. Vi tar även upp detta i säkerhetsguiden för BinaryFormater.

På grund av kända risker med att använda BinaryFormatterexkluderades funktionen från .NET Core 1.0. Men utan en tydlig migreringsväg till att använda något säkrare ledde kundefterfrågan till att BinaryFormatter inkluderas i .NET Core 2.0. Sedan dess har .NET-teamet varit på väg att ta bort BinaryFormatter, och stänger långsamt av det som standard i flera projekttyper men ger användarna möjlighet att välja det via flaggor om det fortfarande behövs för bakåtkompatibilitet.

Mer information om beslutet finns i meddelandet om borttagningen i .NET 9.

Om du stöter på problem som rör BinaryFormatterborttagning som inte åtgärdas i den här migreringsguiden kan du skicka in ett problem på github.com/dotnet/runtime och ange att problemet är relaterat till borttagningen av BinaryFormatter.

Migrationsfrågor

Att migrera bort från BinaryFormatter innebär vanligtvis att välja en annan serialiserare. Det är dock vanligtvis bara genomförbart om du kontrollerar både producent och konsument av kodade data. Om du inte kontrollerar producenten kan du även gå över till vårt nya API för att läsa BinaryFormatter nyttolaster utan att instansiera någon av de kodade typerna.

Båda alternativen utforskas nedan.

Välj en serialiserare

Det första steget för att migrera från BinaryFormatter är att välja en serialiserare som ska användas i dess ställe. Beroende på dina specifika behov rekommenderar .NET-teamet migreringar till fyra olika serialiserare.

Läsnyttolaster BinaryFormatter (NRBF)

Många program läser in och deserialiserar nyttolaster som har sparats till lagring och det är inte alltid möjligt att transformera alla beständiga nyttolaster i förväg. Andra scenarier kan omfatta system eller tjänster som tar emot data som produceras av BinaryFormatter, där dessa system måste migreras oberoende av varandra.

I dessa scenarier och andra blir det nödvändigt att behålla stöd för att läsa de angivna nyttolasterna och övergå till ett nytt format över tid. För att uppfylla dessa behov är det nu möjligt att på ett säkert sätt läsa NRBF-nyttolaster som skapats med BinaryFormatter utan att utföra generell och sårbar deserialisering.

Migrera Windows Forms- och WPF-program

Windows Forms- och WPF-program kan kräva ytterligare ändringar. Se Windows Forms-appar, WPF-appar och WinForms/WPF Urklipp och dra och släpp-vägledning för ytterligare migreringsvägledning.

Migrera hanterade resurser (ResX)

De vanligaste resurstyperna (till exempel strängar och ikoner) fungerar utan BinaryFormatter. För anpassade typer måste du importera BinaryFormatter och aktivera en kompatibilitetsinställning, se Läsa in resurs under körning.

Använda kompatibilitetspaketet

För scenarier där en migrering bort från BinaryFormatter inte kan utföras när du uppgraderar till .NET 9 är ett kompatibilitetspaket som inte stöds tillgängligt. System.Runtime.Serialization. NuGet-paketet Formatters innehåller en fungerande implementering av BinaryFormatter, inklusive dess sårbarheter och risker.

Även om den inte stöds och inte rekommenderas innehåller guiden för att använda kompatibilitetspaketet information om hur du installerar paketet och aktiverar funktionerna.

Försiktighet

Vi rekommenderar starkt att du inte använder BinaryFormatter på grund av de tillhörande säkerhetsriskerna. Befintliga användare bör migrera bort från BinaryFormatter.