次の方法で共有


CA2120: シリアル化コンストラクターをセキュリティで保護します

TypeName

SecureSerializationConstructors

CheckId

CA2120

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

ISerializable インターフェイスを実装している型が、デリゲートでもインターフェイスでもなく、部分信頼の呼び出し元を許可するアセンブリで宣言されています。この型に、SerializationInfo オブジェクトと StreamingContext オブジェクト (シリアル化コンストラクターのシグネチャ) を使用するコンストラクターがあります。このコンストラクターはセキュリティ チェックで保護されていませんが、型に含まれる標準コンストラクターの 1 つ以上は保護されています。

規則の説明

この規則は、カスタムのシリアル化をサポートする型に関係があります。型で 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);
        }
    }

 }

関連規則

CA2229: シリアル化コンストラクターを実装します

CA2237: ISerializable 型を SerializableAttribute に設定します

参照

関連項目

ISerializable

SerializationInfo

StreamingContext