CA2120: Zabezpečte serializační konstruktory
Název_typu |
SecureSerializationConstructors |
CheckId |
CA2120 |
Kategorie |
Microsoft.Security |
Změnit rozdělení |
Rozdělení |
Příčina
Typ implementuje ISerializable rozhraní, není delegáta nebo rozhraní a je deklarován v sestavení, které umožňují volajícím částečně důvěryhodného.Konstruktor, který má typ SerializationInfo objektu a StreamingContext objektu (podpis serializace konstruktoru).Tento konstruktor není zajištěné bezpečnostní kontrola, ale jeden nebo více pravidelných konstruktory typu je zabezpečen.
Popis pravidla
Toto pravidlo platí pro typy, které podporují vlastní serializaci.Typ podporuje vlastní serializaci, pokud provádí požadavky ISerializable rozhraní.Konstruktor serializace je požadován a slouží k deserializovat nebo znovu vytvořit objekty, které serializovat pomocí ISerializable.GetObjectData metoda.Protože serializace konstruktor přiděluje a inicializuje objektů, musí být kontroly zabezpečení, které se nacházejí v pravidelných konstruktory také v konstruktoru serializace.Pokud toto pravidlo porušují, volajícím, které nelze jinak vytvořit instanci nelze k tomu použít konstruktor serializace.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla Chraňte serializace konstruktor s požadavky na zabezpečení, které jsou stejné jako ty, které chrání jiné konstruktory.
Při potlačení upozornění
Nepotlačovat porušení pravidla.
Příklad
Následující příklad ukazuje typ, který porušuje pravidlo.
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);
}
}
}
Souvisejících pravidel
CA2229: Implementovat serializační konstruktory
CA2237: Označte typy ISerializable pomocí SerializableAttribute