Поделиться через


CA5367: не сериализуйте типы с полями указателей

Свойство Значение
Идентификатор правила CA5367
Заголовок Не сериализуйте типы с полями указателя
Категория Безопасность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 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;
}