CA5367: ポインター フィールドを持つ型をシリアル化しない

プロパティ
ルール ID CA5367
Title ポインター フィールドを持つ型をシリアル化しません
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

ポインターはタイプ セーフではないため、ポイントしているメモリの正確性を保証できません。 したがって、ポインター フィールドを持つ型をシリアル化すると、攻撃者がポインターを制御できる可能性があるため、セキュリティ上のリスクが生じます。

規則の説明

この規則では、ポインター フィールドまたはプロパティを持つシリアル化可能なクラスがあるかどうかをチェックします。 静的メンバー、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;
}