Sdílet prostřednictvím


CA2120: Zabezpečte serializační konstruktory

Název_typu

SecureSerializationConstructors

CheckId

CA2120

Kategorie

Microsoft.Security

Změnit rozdělení

Rozdělení

Příčina

Typ implementuje ISerializable rozhraní, není delegáta nebo rozhraní a je deklarován v sestavení, které umožňují volajícím částečně důvěryhodného.Konstruktor, který má typ SerializationInfo objektu a StreamingContext objektu (podpis serializace konstruktoru).Tento konstruktor není zajištěné bezpečnostní kontrola, ale jeden nebo více pravidelných konstruktory typu je zabezpečen.

Popis pravidla

Toto pravidlo platí pro typy, které podporují vlastní serializaci.Typ podporuje vlastní serializaci, pokud provádí požadavky ISerializable rozhraní.Konstruktor serializace je požadován a slouží k deserializovat nebo znovu vytvořit objekty, které serializovat pomocí ISerializable.GetObjectData metoda.Protože serializace konstruktor přiděluje a inicializuje objektů, musí být kontroly zabezpečení, které se nacházejí v pravidelných konstruktory také v konstruktoru serializace.Pokud toto pravidlo porušují, volajícím, které nelze jinak vytvořit instanci nelze k tomu použít konstruktor serializace.

Jak opravit porušení

Chcete-li opravit porušení tohoto pravidla Chraňte serializace konstruktor s požadavky na zabezpečení, které jsou stejné jako ty, které chrání jiné konstruktory.

Při potlačení upozornění

Nepotlačovat porušení pravidla.

Příklad

Následující příklad ukazuje typ, který porušuje pravidlo.

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);
        }
    }

 }

Souvisejících pravidel

CA2229: Implementovat serializační konstruktory

CA2237: Označte typy ISerializable pomocí SerializableAttribute

Viz také

Referenční dokumentace

ISerializable

SerializationInfo

StreamingContext