SYSLIB0001:UTF-7 编码不安全
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. } }
抑制警告
如果必须使用已过时的 API,可在代码或项目文件中禁止显示警告。
若只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用警告。
// Disable the warning.
#pragma warning disable SYSLIB0001
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0001
若要禁止显示项目中的所有 SYSLIB0001
警告,请将属性 <NoWarn>
添加到项目文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
</PropertyGroup>
</Project>
有关详细信息,请参阅取消警告。