CA5367:请勿序列化具有 Pointer 字段的类型

属性
规则 ID CA5367
标题 请勿序列化具有 Pointer 字段的类型
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

Pointer 不是类型安全的,这意味着你无法保证它们所指向的内存的正确性。 因此,序列化具有 Pointer 字段的类型会带来安全风险,它可能允许攻击者控制指针。

规则说明

此规则会检查是否存在具有 Pointer 字段或属性的可序列化类。 无法进行序列化的成员可能是指针,例如使用 System.NonSerializedAttribute 进行标记的静态成员或字段。

如何解决冲突

不要对可序列化类中的成员使用指针类型,也不要对作为指针的成员进行序列化。

何时禁止显示警告

不要冒险在可序列化类型中使用指针。

伪代码示例

冲突

using System;

[Serializable()]
unsafe class TestClassA
{
    private int* pointer;
}

解决方案 1

using System;

[Serializable()]
unsafe class TestClassA
{
    private int i;
}

解决方案 2

using System;

[Serializable()]
unsafe class TestClassA
{
    private static int* pointer;
}