Bagikan melalui


Metode serialisasi BinaryFormatter usang dan dilarang di aplikasi ASP.NET

Serialize dan Deserialize metode pada BinaryFormatter, Formatter, dan IFormatter sekarang usang sebagai peringatan. Selain itu, BinaryFormatter serialisasi dilarang secara default untuk aplikasi ASP.NET.

Nota

Di .NET 7, API yang terkena dampak menjadi tidak digunakan lagi dengan status kesalahan. Untuk informasi selengkapnya, lihat API serialisasi BinaryFormatter menghasilkan kesalahan kompilator.

Ubah deskripsi

Karena kerentanan keamanan dalam BinaryFormatter, metode berikut sekarang usang dan menghasilkan peringatan waktu kompilasi dengan ID SYSLIB0011. Selain itu, di aplikasi ASP.NET Core 5.0 dan yang lebih baru, mereka akan melontarkan pengecualian NotSupportedException, kecuali aplikasi web telah mengaktifkan kembali fungsi BinaryFormatter.

Metode serialisasi berikut juga usang dan menghasilkan peringatan SYSLIB0011, tetapi tidak memiliki perubahan perilaku:

Versi yang diperkenalkan

5.0

Alasan perubahan

Metode ini ditandai usang sebagai bagian dari upaya untuk menurunkan penggunaan BinaryFormatter dalam ekosistem .NET.

  • Berhenti menggunakan BinaryFormatter dalam kode Anda. Sebagai gantinya, pertimbangkan untuk menggunakan JsonSerializer atau XmlSerializer. Untuk informasi selengkapnya, lihat Panduan keamanan BinaryFormatter.

  • Anda dapat sementara menekan peringatan waktu kompilasi BinaryFormatter, yaitu SYSLIB0011. Kami menyarankan agar Anda menilai kode Anda secara menyeluruh untuk risiko sebelum memilih opsi ini. Cara termudah untuk menekan peringatan adalah dengan mengelilingi lokasi pemanggilan individu dengan #pragma petunjuk.

    // Now read the purchase order back from disk
    using (var readStream = new FileStream("myfile.bin", FileMode.Open))
    {
        var formatter = new BinaryFormatter();
    #pragma warning disable SYSLIB0011
        return (PurchaseOrder)formatter.Deserialize(readStream);
    #pragma warning restore SYSLIB0011
    }
    

    Anda juga dapat mengabaikan peringatan dalam file proyek.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "BinaryFormatter is obsolete" warnings for entire project -->
      <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
    </PropertyGroup>
    

    Jika Anda menonaktifkan peringatan dalam file proyek, peringatan tersebut akan disembunyikan untuk semua file kode di proyek tersebut. Penekanan SYSLIB0011 tidak menekan peringatan yang disebabkan oleh penggunaan API usang lainnya.

  • Untuk terus menggunakan BinaryFormatter di aplikasi ASP.NET, Anda dapat mengaktifkannya kembali dalam file proyek. Namun, sangat disarankan untuk tidak melakukan ini. Untuk informasi selengkapnya, lihat Panduan keamanan BinaryFormatter.

    <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
      <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
    </PropertyGroup>
    

Untuk informasi selengkapnya tentang tindakan yang direkomendasikan, lihat Mengatasi kesalahan kedaluarsa dan penonaktifan BinaryFormatter.

API yang terpengaruh

Lihat juga