SYSLIB0001: la codificación UTF-7 no es segura
La codificación UTF-7 ya no se usa de forma generalizada en la mayoría de las aplicaciones, y muchas especificaciones ahora prohíben su uso en el intercambio. En ocasiones, también se usa como vector de ataque en aplicaciones que no anticipan el encuentro de datos codificados en UTF-7. Microsoft advierte contra el uso de System.Text.UTF7Encoding, porque no proporciona detección de errores.
Por tanto, las siguientes API se han marcado como obsoletas a partir de .NET 5. El uso de estas API genera una advertencia SYSLIB0001
en tiempo de compilación.
- PropiedadEncoding.UTF7
- Constructores UTF7Encoding
Soluciones alternativas
Si usa Encoding.UTF7 o UTF7Encoding en su propio protocolo o formato de archivo:
Cambie al uso de Encoding.UTF8 o UTF8Encoding. UTF-8 es un estándar del sector y es compatible con numerosos lenguajes, sistemas operativos y entornos de ejecución. El uso de UTF-8 facilita el mantenimiento futuro del código y hace que sea más interoperable con el resto del ecosistema.
Si va a comparar una instancia de Encoding con Encoding.UTF7:
Considere mejor la posibilidad de realizar una comprobación con la página de códigos UTF-7 conocidos, que es
65000
. De esta manera, evita la advertencia y también se controlan algunos casos extremos, como, por ejemplo, si alguien llamó anew UTF7Encoding()
o incluyó el tipo en una subclase.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. } }
Supresión de una advertencia
Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.
Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.
// Disable the warning.
#pragma warning disable SYSLIB0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0001
Para suprimir todas las advertencias SYSLIB0001
del proyecto, agregue una propiedad <NoWarn>
al archivo del proyecto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
</PropertyGroup>
</Project>
Para obtener más información, vea Suprimir advertencias.