SYSLIB0001:UTF-7 编码不安全

2022-01-05 19:02:26 浏览数 (1)

UTF-7 编码在应用程序中不再广泛使用,并且许多规范现在在交换中禁止其使用。 它偶尔还会在不期望遇到 UTF-7 编码数据的应用程序中用作攻击途径。 Microsoft 警告不要使用 System.Text.UTF7Encoding,因为它不提供错误检测。

因此从 .NET 5 开始,以下 API 标记为已过时。 使用这些 API 会在编译时生成警告 SYSLIB0001。

Encoding.UTF7 属性

UTF7Encoding 构造函数

工作区

如果在你自己的协议或文件格式中使用的是 Encoding.UTF7 或 UTF7Encoding:

切换到使用 Encoding.UTF8 或 UTF8Encoding。 UTF-8 是一种行业标准,并且受到语言、操作系统和运行时的广泛支持。 使用 UTF-8 简化了代码的将来维护,并使其与生态系统的其余部分更具互操作性。

如果要将 Encoding 实例与 Encoding.UTF7 进行比较:

可转为考虑针对众所周知的 UTF-7 代码页(即 65000)执行检查。 通过与代码页进行比较,可以避免出现警告,还可以处理一些边缘情况,例如,如果有人调用 new UTF7Encoding() 或子类化类型。

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.

}

}

禁止显示警告

建议尽可能使用可用的解决方法。 但是,如果无法更改代码,可以通过 #pragma 指令或 <NoWarn> 项目设置来禁止显示警告。 如果必须使用过时 API,并且 SYSLIB0XXX 诊断没有显示为错误,则可以在代码或项目文件中取消该警告。

若要禁止显示代码中的警告,请执行以下操作:

// Disable the warning.

#pragma warning disable SYSLIB0001

// Code that uses obsolete API.

//...

// Re-enable the warning.

#pragma warning restore SYSLIB0001

若要禁止显示项目文件中的警告,请执行以下操作:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>

<TargetFramework>net5.0</TargetFramework>

<!-- NoWarn below suppresses SYSLIB0001 project-wide -->

<NoWarn>

0 人点赞