Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA5367 |
| Заголовок | Не сериализуйте типы с полями указателя |
| Категория | Безопасность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Нет |
| Применимые языки | C# и Visual Basic |
Причина
Указатели не являются типобезопасными. Это означает, что нельзя гарантировать правильность памяти, на которую они указывают. Таким образом, сериализация типов с полями указателей представляет угрозу для безопасности, так как злоумышленник сможет получить доступ к управлению указателем.
Описание правила
Это правило проверяет, существует ли сериализуемый класс с полем указателя или свойством. Элементы, которые не могут быть сериализованы, могут быть указателями, такими как статические члены или поля, помеченные атрибутом 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;
}