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;
}