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;
}
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET