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.
- Proprietà Encoding.UTF7
- Costruttori UTF7Encoding
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 chiamatonew 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.