Compartilhar via


CA2120: Construtores de serialização seguro

TypeName

SecureSerializationConstructors

CheckId

CA2120

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

O tipo implementa o System.Runtime.Serialization.ISerializable interface, não é um delegado ou a interface e é declarado em um assembly que permite aos chamadores parcialmente confiáveis.O tipo tem um construtor que leva um System.Runtime.Serialization.SerializationInfo objeto e um System.Runtime.Serialization.StreamingContext (a assinatura do construtor serialização) do objeto.Este construtor não é protegida por uma verificação de segurança, mas um ou mais dos construtores regulares no tipo é protegido.

Descrição da regra

Essa regra é relevante para tipos que oferecem suporte a serialização personalizada.Um tipo oferece suporte a serialização personalizada se ele implementa o System.Runtime.Serialization.ISerializable interface.O construtor de serialização é necessário e é usado para desserializar ou recriar os objetos que tiverem sido serializados usando o ISerializable.GetObjectData método.Como o construtor de serialização aloca e inicializa os objetos, as verificações de segurança que estão presentes em construtores regulares também devem ser presentes no construtor de serialização.Se você violar esta regra, os chamadores que, caso contrário, não foi possível criar uma instância poderiam usar o construtor de serialização para fazer isso.

Como corrigir violações

Para corrigir uma violação desta regra, proteja o construtor de serialização com demandas de segurança que são idênticas àquelas protegendo outros construtores.

Quando suprimir avisos

Não suprimir uma violação da regra.

Exemplo

O exemplo a seguir mostra um tipo que viola a regra.

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

 }

Regras relacionadas

CA2229: Construtores de serialização de implementar

CA2237: Os tipos ISerializable da marca com o SerializableAttribute

Consulte também

Referência

System.Runtime.Serialization.ISerializable

System.Runtime.Serialization.SerializationInfo

System.Runtime.Serialization.StreamingContext