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();
}
}
}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin