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