Udostępnij za pośrednictwem


CA2120: Zabezpieczaj konstruktory serializacji

TypeName

SecureSerializationConstructors

CheckId

CA2120

Kategoria

Microsoft.Security

Złamanie zmiany

Złamanie

Przyczyna

Typ implementuje ISerializable interfejsu, pełnomocnik lub interfejs nie jest i jest zadeklarowany w zestawie pozwala częściowo zaufanych wywołań.Typ ma konstruktora, który ma SerializationInfo obiektu i StreamingContext obiektu (podpis konstruktora serializacji).Ten konstruktor nie jest zabezpieczony przez sprawdzenie zabezpieczeń, ale jeden lub więcej regularnych konstruktory typu jest zabezpieczona.

Opis reguły

Ta reguła jest istotne dla typów, które obsługują serializacji niestandardowej.Typ obsługuje serializacji niestandardowej, jeśli implementuje ISerializable interfejsu.Konstruktor serializacji jest wymagana i jest używany do przeprowadzić deserializacji lub ponownie utworzyć obiekty szeregowane za pomocą ISerializable.GetObjectData metody.Ponieważ konstruktora serializacji alokuje i inicjuje obiektów, kontroli bezpieczeństwa, które znajdują się na regularnych konstruktory również musi być obecny w konstruktorze serializacji.Jeśli naruszysz tę regułę, w wywoływania, które w przeciwnym razie nie można utworzyć wystąpienia w tym celu można użyć Konstruktora serializacji.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, chronić konstruktora serializacji wymogów zabezpieczeń, które są identyczne z tymi ochrony innych konstruktorów.

Kiedy do pomijania ostrzeżenia

Nie pomijaj naruszenie reguły.

Przykład

Poniższy przykład pokazuje typ, który narusza reguły.

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

 }

Zasady pokrewne

CA2229: Należy zaimplementować konstruktory serializacji

CA2237: Należy oznaczyć typ ISerializable atrybutem SerializableAttribute

Zobacz też

Informacje

ISerializable

SerializationInfo

StreamingContext