CA5367: не сериализуйте типы с полями указателей
Свойство | Значение |
---|---|
Идентификатор правила | CA5367 |
Заголовок | Не сериализуйте типы с полями указателя |
Категория | Безопасность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 9 | No |
Причина
Указатели не являются типобезопасными. Это означает, что нельзя гарантировать правильность памяти, на которую они указывают. Таким образом, сериализация типов с полями указателей представляет угрозу для безопасности, так как злоумышленник сможет получить доступ к управлению указателем.
Описание правила
Это правило проверяет, существует ли сериализуемый класс с полем указателя или свойством. Элементы, которые не могут быть сериализованы, могут быть указателями, такими как статические члены или поля, помеченные атрибутом 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;
}