CA2120: シリアル化コンストラクターをセキュリティで保護します
TypeName |
SecureSerializationConstructors |
CheckId |
CA2120 |
[カテゴリ] |
Microsoft.Security |
互換性に影響する変更点 |
あり |
原因
System.Runtime.Serialization.ISerializable インターフェイスを実装している型が、デリゲートでもインターフェイスでもなく、部分信頼の呼び出し元を許可するアセンブリで宣言されています。この型に、System.Runtime.Serialization.SerializationInfo オブジェクトと System.Runtime.Serialization.StreamingContext オブジェクト (シリアル化コンストラクターのシグネチャ) を使用するコンストラクターがあります。このコンストラクターはセキュリティ チェックで保護されていませんが、型に含まれる標準コンストラクターの 1 つ以上は保護されています。
規則の説明
この規則は、カスタムのシリアル化をサポートする型に関係があります。型で System.Runtime.Serialization.ISerializable インターフェイスを実装する場合、カスタムのシリアル化がサポートされます。シリアル化コンストラクターは、ISerializable.GetObjectData メソッドを使用してシリアル化されたオブジェクトの逆シリアル化、または再作成に必要です。シリアル化コンストラクターはオブジェクトの割り当てと初期化を行うため、標準コンストラクターにあるセキュリティ チェックは、シリアル化コンストラクターにも必要です。この規則に違反すると、本来はインスタンスを作成できなかった呼び出し元でも、シリアル化コンストラクターを使用して作成できるようになります。
違反の修正方法
この規則違反を修正するには、シリアル化コンストラクターをセキュリティ確認要求で保護します。保護方法は、他のコンストラクターの場合と同じです。
警告を抑制する状況
この規則の警告は抑制しないでください。
使用例
この規則に違反する型を次の例に示します。
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security;
using System.Security.Permissions;
[assembly: AllowPartiallyTrustedCallersAttribute()]
namespace SecurityRulesLibrary
{
[Serializable]
public class SerializationConstructorsRequireSecurity : ISerializable
{
private int n1;
// This is a regular constructor secured by a demand.
[FileIOPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public SerializationConstructorsRequireSecurity ()
{
n1 = -1;
}
// This is the serialization constructor.
// Violates rule: SecureSerializationConstructors.
protected SerializationConstructorsRequireSecurity (SerializationInfo info, StreamingContext context)
{
n1 = (int) info.GetValue("n1", typeof(int));
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("n1", n1);
}
}
}
関連規則
CA2237: ISerializable 型を SerializableAttribute に設定します
参照
関連項目
System.Runtime.Serialization.ISerializable