CA2326:请勿使用 None 以外的 TypeNameHandling 值

属性
规则 ID CA2326
标题 请勿使用 None 以外的 TypeNameHandling 值
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

如果满足以下任一条件,则会触发此规则:

规则说明

反序列化不受信任的数据时,会对不安全的反序列化程序造成风险。 攻击者可能会修改序列化数据,使其包含非预期类型,进而注入具有不良副作用的对象。 例如,针对不安全反序列化程序的攻击可以在基础操作系统上执行命令,通过网络进行通信,或删除文件。

此规则会查找 None 以外的 Newtonsoft.Json.TypeNameHandling 值。 如果仅希望在指定 Newtonsoft.Json.Serialization.ISerializationBinder 来限制反序列化类型时进行反序列化,请禁用此规则并启用规则 CA2327CA2328CA2329CA2330

如何解决冲突

何时禁止显示警告

在以下情况下,禁止显示此规则的警告是安全的:

  • 已知输入为受信任输入。 考虑应用程序的信任边界和数据流可能会随时间发生变化。
  • 你采取了如何修复冲突的某项预防措施。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA2326.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

伪代码示例

冲突

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();
        Settings.TypeNameHandling = TypeNameHandling.All;    // CA2326 violation.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()
        Settings.TypeNameHandling = TypeNameHandling.All    ' CA2326 violation.
    End Sub
End Class

解决方案

using Newtonsoft.Json;

public class ExampleClass
{
    public JsonSerializerSettings Settings { get; }

    public ExampleClass()
    {
        Settings = new JsonSerializerSettings();

        // The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    }
}
Imports Newtonsoft.Json

Public Class ExampleClass
    Public ReadOnly Property Settings() As JsonSerializerSettings

    Public Sub New()
        Settings = New JsonSerializerSettings()

        ' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
    End Sub
End Class

CA2327:不要使用不安全的 JsonSerializerSettings

CA2328:确保 JsonSerializerSettings 是安全的

CA2329:不要使用不安全的配置反序列化 JsonSerializer

CA2330:在反序列化时确保 JsonSerializer 具有安全配置