Udostępnij za pośrednictwem


SYSLIB0001: kodowanie UTF-7 jest niezabezpieczone

Kodowanie UTF-7 nie jest już szeroko używane między aplikacjami, a wiele specyfikacji obecnie zabrania używania w wymiennych. Jest on również czasami używany jako wektor ataku w aplikacjach, które nie przewidują napotkania danych zakodowanych w formacie UTF-7. Firma Microsoft ostrzega przed użyciem programu , System.Text.UTF7Encoding ponieważ nie zapewnia wykrywania błędów.

W związku z tym następujące interfejsy API są oznaczone jako przestarzałe, począwszy od platformy .NET 5. Użycie tych interfejsów API generuje ostrzeżenie SYSLIB0001 w czasie kompilacji.

Obejścia

  • Jeśli używasz Encoding.UTF7 własnego protokołu lub formatu pliku:UTF7Encoding

    Przełącz się na przy użyciu polecenia Encoding.UTF8 lub UTF8Encoding. UTF-8 jest standardem branżowym i jest powszechnie obsługiwany w różnych językach, systemach operacyjnych i środowiskach uruchomieniowych. Korzystanie z protokołu UTF-8 ułatwia przyszłą konserwację kodu i zwiększa jego współdziałanie z resztą ekosystemu.

  • Jeśli porównujesz wystąpienie z elementem EncodingEncoding.UTF7:

    Zamiast tego rozważ przeprowadzenie kontroli na dobrze znanej stronie kodowej UTF-7, czyli 65000. Porównując się ze stroną kodu, należy unikać ostrzeżenia, a także obsługiwać niektóre przypadki brzegowe, takie jak wywołanie new UTF7Encoding() lub podklasa typu.

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

Pomijanie ostrzeżenia

Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.

Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Aby pominąć wszystkie SYSLIB0001 ostrzeżenia w projekcie, dodaj <NoWarn> właściwość do pliku projektu.

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

Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.

Zobacz też