Compartilhar via


CA2120: proteger construtores de serialização

TypeName

SecureSerializationConstructors

CheckId

CA2120

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

O tipo implementa a interface de ISerializable , não é um representante ou uma interface, e é declarada em um assembly que permitir chamadores parcialmente confiáveis.O tipo tem um construtor que usa um objeto de SerializationInfo e um objeto de StreamingContext (assinatura do construtor de serialização).Este construtor não é protegida por uma verificação de segurança, mas um ou mais dos construtores normais no tipo são protegidos.

Descrição da Regra

Esta regra é relevante para os tipos que dão suporte a serialização personalizada.Um tipo oferecer suporte a serialização personalizada que implementa a interface de ISerializable .O construtor de serialização é necessário e usado para serializar o MDS, ou recrie os objetos que foram serializado usando o método de ISerializable.GetObjectData .Como o construtor de serialização aloca e inicializa objetos, as verificações de segurança que estão presentes na deve normal dos construtores também estão presentes no construtor de serialização.Se você violar essa regra, os chamadores que não puderam de outra forma 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, proteger o construtor de serialização com as demandas de segurança que são idênticas às de sombreamento outros construtores.

Quando Suprimir Alertas

Não suprima 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: implementar construtores de serialização

CA2237: marcar tipos ISerializable com SerializableAttribute

Consulte também

Referência

ISerializable

SerializationInfo

StreamingContext