Aracılığıyla paylaş


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

Ayrıca bkz.

Başvuru

ISerializable

SerializationInfo

StreamingContext