Share via


CA2141:Transparent yöntemleri LinkDemands'i karşılamamalıdır

Ürün Değer
RuleId CA2141
Kategori Microsoft.Security
Hataya neden olan değişiklik Yeni

Neden

Saydam güvenlik yöntemi, (APTCA) özniteliğiyle AllowPartiallyTrustedCallersAttribute işaretlenmemiş bir derlemedeki bir yöntemi çağırır veya bir tür veya yöntem için bir güvenlik saydam yöntemi tarafından karşılanır SecurityAction.LinkDemand .

Dekont

Bu kural kullanım dışı bırakıldı. Daha fazla bilgi için bkz . Kullanım dışı kurallar.

Kural açıklaması

LinkDemand'ı karşılamak, ayrıcalıkların yanlışlıkla yükseltilmesine neden olabilen, güvenlik açısından hassas bir işlemdir. Güvenlik açısından kritik kodla aynı güvenlik denetimi gereksinimlerine tabi olmadığından, saydam güvenlik kodu LinkDemands'ı karşılamamalıdır. Güvenlik kuralı kümesi düzey 1 derlemelerindeki saydam yöntemler, karşıladıkları tüm LinkDemand'lerin çalışma zamanında tam taleplere dönüştürülmesini sağlar ve bu da performans sorunlarına neden olabilir. Güvenlik kuralı kümesi düzey 2 derlemelerinde, saydam yöntemler bir LinkDemand'ı karşılamaya çalışırlarsa tam zamanında (JIT) derleyicisinde derlenemiyor.

Düzey 2 güvenliğini kullanan derlemelerde, bir LinkDemand'ı karşılamaya veya APTCA olmayan bir derlemede bir yöntemi çağırmaya yönelik bir güvenlik saydam yöntemi tarafından yapılan girişimler bir MethodAccessExceptionoluşturur; Düzey 1 derlemelerinde LinkDemand tam bir Talep olur.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için erişim yöntemini veya SecuritySafeCriticalAttribute özniteliğiyle SecurityCriticalAttribute işaretleyin veya erişilen yöntemden LinkDemand öğesini kaldırın.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Örnek

Bu örnekte saydam bir yöntem, LinkDemand içeren bir yöntemi çağırmaya çalışır. Bu kural bu kodda tetiklenir.

using System;
using System.Security.Permissions;


namespace TransparencyWarningsDemo
{

    public class TransparentMethodSatisfiesLinkDemandsClass
    {
        [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
        public void LinkDemandMethod() { }


        public void TransparentMethod()
        {
            // CA2141 violation - transparent method calling a method protected with a link demand.  Any of the
            // following fixes will work here:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Remove the LinkDemand from LinkDemandMethod  (In this case, that would be recommended anyway
            //     since it's level 2 -- however you could imagine it in a level 1 assembly)
            LinkDemandMethod();
        }
    }
}