CA2120: Serileştirme oluşturucularının güvenliğini sağlayın
TypeName |
SecureSerializationConstructors |
CheckId |
CA2120 |
Kategori |
Microsoft.Security |
Değişiklik kesiliyor |
Bölme |
Neden
Türünü uygulayan ISerializable arabirimi, temsilci veya arabirim değildir ve kısmen güvenilen Arayanlara izin veren bir derlemede bildirilir.Götüren bir kurucu türüne sahip bir SerializationInfo nesnesi ve bir StreamingContext nesne (seri hale getirme yapıcı imza).Bu Oluşturucu tarafından güvenlik denetimi güvenli değil, ancak normal Kurucular yazın en az biri güvenlik altına alınır.
Kural Tanımı
Bu kuralın özel seri hale getirme destekleyen türleri için geçerlidir.Bunu uygulayan özel seri hale getirme türü desteklediği ISerializable arabirimi.Seri hale getirme yapıcı gereklidir ve anlayabileceği veya kullanarak serileştirilmiş nesneler yeniden oluşturmak için kullanılan ISerializable.GetObjectData yöntemi.Seri hale getirme yapıcı ayırır ve nesneleri başlatır çünkü normal Kurucular üzerinde bulunan güvenlik denetimleri de seri hale getirme Oluşturucu mevcut olması gerekir.Bu kuralı ihlal eden, aksi bir örneği oluşturulamadı arayanlar seri hale getirme kurucusu bunu yapmak için kullanabilirsiniz.
İhlalleri düzeltmek nasıl
Bu kuralı ihlal düzeltmek için seri hale getirme oluşturucuya sahip olanlar diğer Kurucular koruma aynı güvenlik taleplerini koruyun.
Uyarıları ne zaman
Kuralı ihlal engelleme.
Örnek
Aşağıdaki örnek, kuralını ihlal eden bir türü gösterilir.
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);
}
}
}
İlgili kuralları
CA2229: Serileştirme oluşturucularını uygulayın
CA2237: ISerializable türleri SerializableAttribute ile işaretleyin