通过


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

属性
规则 ID CA2326
标题 请勿使用 None 以外的 TypeNameHandling 值
类别 安全性
修复是导致破坏性更改还是非破坏性更改 非中断
在 .NET 10 中默认启用
适用的语言 C# 和 Visual Basic

原因

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

规则说明

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

此规则会查找 Newtonsoft.Json.TypeNameHandling 中除 None 以外的值。 如果仅希望在指定 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 具有安全配置