SYSLIB0001: Az UTF-7 kódolása nem biztonságos

Az UTF-7 kódolás már nem széles körben használható az alkalmazások körében, és számos specifikáció tiltja a használatot a felcserélésben. Időnként támadási vektorként is használják olyan alkalmazásokban, amelyek nem számítanak az UTF-7 kódolású adatokkal való találkozásra. A Microsoft óva int a System.Text.UTF7Encoding használattól, mert nem biztosít hibaészlelést.

Ezért a következő API-k elavultnak vannak megjelölve, kezdve a .NET 5-tel. Ezeknek az API-knak a használata figyelmeztetést SYSLIB0001 generál fordításkor.

Kerülő megoldások

  • Ha saját protokollt vagy UTF7Encoding fájlformátumot használ vagy használEncoding.UTF7:

    Váltás a következőre: használat Encoding.UTF8 vagy UTF8Encoding. Az UTF-8 iparági szabvány, és széles körben támogatott nyelvek, operációs rendszerek és futtatókörnyezetek között. Az UTF-8 használata megkönnyíti a kód későbbi karbantartását, és az ökoszisztéma többi részével való együttműködését teszi lehetővé.

  • Ha összehasonlít egy példányt Encoding a következőval Encoding.UTF7:

    Ehelyett érdemes lehet ellenőrizni a jól ismert UTF-7 kódlapot, amely a 65000. Ha összehasonlítja a kódlapot, elkerülheti a figyelmeztetést, és bizonyos peremes eseteket is kezelhet, például ha valaki meghívta new UTF7Encoding() vagy alosztályozza a típust.

    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.
        }
    }
    

Figyelmeztetés mellőzése

Ha az elavult API-kat kell használnia, letilthatja a figyelmeztetést a kódban vagy a projektfájlban.

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz, hogy letiltsa, majd engedélyezze újra a figyelmeztetést.

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Ha el szeretné tiltani a SYSLIB0001 projekt összes figyelmeztetését, adjon hozzá egy tulajdonságot <NoWarn> a projektfájlhoz.

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

További információ: Figyelmeztetések mellőzése.

Lásd még