Bagikan melalui


SYSLIB0001: Pengodean UTF-7 tidak aman

Pengodean UTF-7 tidak lagi digunakan secara luas di antara aplikasi, dan banyak spesifikasi sekarang melarang penggunaannya dalam pertukaran. Ini juga kadang-kadang digunakan sebagai vektor serangan dalam aplikasi yang tidak mengantisipasi menemukan data yang dikodekan UTF-7. Microsoft memperingatkan terhadap penggunaan System.Text.UTF7Encoding karena tidak memberikan deteksi kesalahan.

Akibatnya, API berikut ditandai usang, mulai dari .NET 5. Penggunaan API ini menghasilkan peringatan SYSLIB0001 pada waktu kompilasi.

Penyelesaian masalah

  • Jika Anda menggunakan Encoding.UTF7 atau UTF7Encoding dalam protokol atau format file Anda sendiri:

    Beralih ke menggunakan Encoding.UTF8 atau UTF8Encoding. UTF-8 adalah standar industri dan didukung secara luas di seluruh bahasa, sistem operasi, dan runtime. Menggunakan UTF-8 memudahkan pemeliharaan kode Anda di masa mendatang dan membuatnya lebih dapat dioperasikan dengan sisa ekosistem.

  • Jika Anda membandingkan Encoding instans dengan Encoding.UTF7:

    Sebagai gantinya, pertimbangkan untuk melakukan pemeriksaan terhadap halaman kode UTF-7 terkenal, yaitu 65000. Dengan membandingkan dengan halaman kode, Anda menghindari peringatan dan juga menangani beberapa kasus tepi, seperti jika seseorang memanggil new UTF7Encoding() atau mensubkelas jenisnya.

    void DoSomething(Encoding enc)
    {
        // Don't perform the check this way.
        // It produces a warning and misses some edge cases.
        if (enc == Encoding.UTF7)
        {
            // Encoding is UTF-7.
        }
    
        // Instead, perform the check this way.
        if (enc != null && enc.CodePage == 65000)
        {
            // Encoding is UTF-7.
        }
    }
    

Menyembunyikan peringatan

Jika Anda harus menggunakan API usang, Anda dapat menekan peringatan dalam kode atau dalam file proyek Anda.

Untuk menekan hanya satu pelanggaran, tambahkan direktif praprosedur ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali peringatan.

// Disable the warning.
#pragma warning disable SYSLIB0001

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0001

Untuk menekan semua SYSLIB0001 peringatan dalam proyek Anda, tambahkan <NoWarn> properti ke file proyek Anda.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
  </PropertyGroup>
</Project>

Untuk informasi selengkapnya, lihat Menyembunyikan peringatan.

Lihat juga