Bagikan melalui


Metode serialisasi BinaryFormatter sudah kedaluwarsa 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.

Catatan

Di .NET 7, API yang terpengaruh kedaluarsa sebagai kesalahan. Untuk informasi selengkapnya, lihat API serialisasi BinaryFormatter menghasilkan kesalahan kompilator.

Deskripsi perubahan

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 melempar NotSupportedException, kecuali aplikasi web telah mengaktifkan BinaryFormatter kembali fungsionalitas.

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

Versi yang diperkenalkan

5.0

Alasan untuk berubah

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 menekan BinaryFormatter sementara peringatan waktu kompilasi, yaitu SYSLIB0011. Kami menyarankan agar Anda menilai kode Anda secara menyeluruh untuk risiko sebelum memilih opsi ini. Cara term mudah untuk menekan peringatan adalah dengan mengelilingi situs panggilan individu dengan #pragma direktif.

    // 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 menyembunyikan peringatan di 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 menekan peringatan dalam file proyek, peringatan ditekan untuk semua file kode dalam proyek. 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