Proteger os construtores de serialização
TypeName |
SecureSerializationConstructors |
CheckId |
CA2120 |
Category (Categoria) |
Microsoft.segurança |
Quebrando alterar |
Quebrando |
Causa
O tipo implementa o System.Runtime.Serialization.ISerializable interface, não é uma interface ou um delegado e é declarada em um assembly que permite aos chamadores parcialmente confiável. O tipo tem um construtor com um System.Runtime.Serialization.SerializationInfo objeto e um System.Runtime.Serialization.StreamingContext objeto (a assinatura do construtor serialização). Esse construtor não é protegida por uma verificação de segurança, mas uma ou mais dos construtores regulares do 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 recrie objetos serializados usando o ISerializable.GetObjectData método. Como o construtor de serialização aloca e inicializa a objetos, verificações de segurança que estão presentes em construtores regulares também devem estar presentes no construtor de serialização.Se violam essa regra, os chamadores 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 dessa 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
Implementar construtores de serialização
Tipos ISerializable marcar com o SerializableAttribute
Consulte também
Referência
System.Runtime.Serialization.ISerializable