Condividi tramite


SYSLIB0001: la codifica UTF-7 non è sicura

La codifica UTF-7 non è più in uso tra le applicazioni e molte specifiche ora ne vietano l'uso nell'interscambio. Viene usata anche occasionalmente come vettore di attacco nelle applicazioni che non prevedono l'incontro dei dati con codifica UTF-7. Microsoft mette in guardia dall'uso di System.Text.UTF7Encoding poichè non fornisce il rilevamento degli errori.

Di conseguenza, le API seguenti sono contrassegnate come obsolete, a partire da .NET 5. L'uso di queste API genera un avviso SYSLIB0001 in fase di compilazione.

Soluzioni alternative

  • Se si usa Encoding.UTF7 o UTF7Encoding all'interno del proprio protocollo o formato di file:

    Passare all'uso di Encoding.UTF8 o UTF8Encoding. UTF-8 è uno standard di settore ed è ampiamente supportato in linguaggi, sistemi operativi e runtime. L'uso di UTF-8 semplifica la manutenzione futura del codice e lo rende più interoperabile con il resto dell'ecosistema.

  • Se si confronta un'istanza Encoding con Encoding.UTF7:

    Prendere invece in considerazione l'esecuzione di un controllo sulla tabella codici UTF-7 nota, ovvero 65000. Confrontando con la tabella codici, si evita l'avviso e si gestiscono anche alcuni casi limite, come ad esempio se qualcuno ha chiamato new UTF7Encoding() o sottoclassato il tipo.

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

Eliminare un avviso

Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.

Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Per eliminare tutti gli avvisi SYSLIB0001 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.

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

Per altre informazioni, vedere Eliminare gli avvisi.

Vedi anche