Güvenliği Saydam Kod, 1. DüzeySecurity-Transparent Code, Level 1

Dikkat

Kod erişim güvenliği (CAS) ve kısmen güvenilen kodCode Access Security (CAS) and Partially Trusted Code

.NET Framework, Kod Erişimi Güvenliği (CAS) olarak adlandırılan ve aynı uygulamada çalıştırılan farklı kodlara farklı güven düzeyleri uygulayan bir mekanizma sağlar.The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS).

CA 'LAR .NET Core, .NET 5 veya sonraki sürümlerde desteklenmez. CA 'LAR 7,0 ' den sonraki C# sürümleri tarafından desteklenmez.CAS is not supported in .NET Core, .NET 5, or later versions. CAS is not supported by versions of C# later than 7.0.

.NET Framework içindeki CA 'LAR, kod kaynağına veya diğer kimlik özelliklerine göre güvenlik sınırları zorlama mekanizması olarak kullanılmamalıdır.CAS in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. CA 'LAR ve Security-Transparent kodu, kısmen güvenilen koda sahip bir güvenlik sınırı olarak desteklenmez, özellikle bilinmeyen kaynak kodu.CAS and Security-Transparent Code are not supported as a security boundary with partially trusted code, especially code of unknown origin. Bilinmeyen kaynaklardan gelen kodların, alternatif güvenlik önlemleri alınmadan yüklenmesi ve yürütülmesi önerilmez.We advise against loading and executing code of unknown origins without putting alternative security measures in place. .NET Framework, CAS korumalı alanında keşfedilmiş tüm ayrıcalık yükselmesi açıklarına yönelik güvenlik düzeltme ekleri yayınmayacak..NET Framework will not issue security patches for any elevation-of-privilege exploits that might be discovered against the CAS sandbox.

Bu ilke tüm .NET Framework sürümleri için geçerlidir, ancak Silverlight’ta bulunan .NET Framework için geçerli değildir.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Saydamlık, geliştiricilerin kısmen güvenilen koda işlevsellik sunan daha güvenli .NET Framework kitaplıklar yazmasını sağlar.Transparency helps developers write more secure .NET Framework libraries that expose functionality to partially trusted code. 1. düzey saydamlık .NET Framework sürüm 2,0 ' de tanıtılmıştı ve öncelikle yalnızca Microsoft içinde kullanılmıştı.Level 1 transparency was introduced in the .NET Framework version 2.0 and was primarily used only within Microsoft. 4. .NET Framework başlayarak düzey 2 saydamlığınıkullanabilirsiniz.Starting with the .NET Framework 4, you can use level 2 transparency. Ancak, 1. düzey saydamlık, önceki güvenlik kuralları ile çalışması gereken eski kodu tanımlayabilmeniz için korunur.However, level 1 transparency has been retained so that you can identify legacy code that must run with the earlier security rules.

Önemli

Düzey 1 saydamlığı yalnızca uyumluluk için belirtmelisiniz; diğer bir deyişle, düzey 1 ' i yalnızca, AllowPartiallyTrustedCallersAttribute veya kullanan ya da saydamlık modelini kullanmayan .NET Framework 3,5 veya önceki bir sürümüyle geliştirilen kod için belirtir.You should specify level 1 transparency for compatibility only; that is, specify level 1 only for code that was developed with the .NET Framework 3.5 or earlier that uses the AllowPartiallyTrustedCallersAttribute or does not use the transparency model. Örneğin, kısmen güvenilen çağıranların (APTCA) çağrılara izin veren .NET Framework 2,0 derlemeleri için düzey 1 saydamlığı kullanın.For example, use level 1 transparency for .NET Framework 2.0 assemblies that allow calls from partially trusted callers (APTCA). .NET Framework 4 için geliştirilen kod için her zaman düzey 2 saydamlığı kullanın.For code that is developed for the .NET Framework 4, always use level 2 transparency.

Bu konu aşağıdaki bölümleri içermektedir:This topic contains the following sections:

Düzey 1 saydamlık modeliThe Level 1 Transparency Model

Düzey 1 saydamlık kullandığınızda, kodu güvenlik açısından saydam, güvenlik açısından güvenli-kritik ve güvenlik açısından kritik yöntemlere ayıran bir güvenlik modeli kullanıyorsunuz.When you use Level 1 transparency, you are using a security model that separates code into security-transparent, security-safe-critical, and security-critical methods.

Tüm bir derlemeyi, bir derlemedeki bazı sınıfları veya bir sınıftaki bazı yöntemleri güvenlik açısından saydam olarak işaretleyebilirsiniz.You can mark a whole assembly, some classes in an assembly, or some methods in a class as security-transparent. Güvenliği saydam kod ayrıcalıkları yükseltemez.Security-transparent code cannot elevate privileges. Bu kısıtlama üç sonuçlara sahiptir:This restriction has three consequences:

  • Güvenliği saydam kod Assert eylem gerçekleştiremez.Security-transparent code cannot perform Assert actions.

  • Güvenliği saydam kod tarafından karşılanması gereken herhangi bir bağlantı talebi, tam talep haline gelir.Any link demand that would be satisfied by security-transparent code becomes a full demand.

  • Güvenlik açısından saydam kodda yürütülmesi gereken güvenli olmayan (doğrulanamayan) kod, güvenlik izni için tam talebe neden olur UnmanagedCode .Any unsafe (unverifiable) code that must execute in security-transparent code causes a full demand for the UnmanagedCode security permission.

Bu kurallar, ortak dil çalışma zamanı (CLR) tarafından yürütme sırasında zorlanır.These rules are enforced during execution by the common language runtime (CLR). Güvenliği saydam kod, geri arayanlara geri çağrı yaptığı kodun tüm güvenlik gereksinimlerini geçirir.Security-transparent code passes all the security requirements of the code it calls back to its callers. Güvenlik açısından saydam kod üzerinden akan talepler ayrıcalıkların yükselmez.Demands that flow through the security-transparent code cannot elevate privileges. Düşük öncelikli bir uygulama, güvenlik açısından saydam kodu çağırırsa ve yüksek ayrıcalıklı bir talebe neden oluyorsa, talep düşük güven koduna geri akacaktır ve başarısız olur.If a low-trust application calls security-transparent code and causes a demand for high privilege, the demand will flow back to the low-trust code and fail. Güvenlik saydam kodu, onay eylemleri gerçekleştiremediğinden isteği durduramıyor.The security-transparent code cannot stop the demand because it cannot perform assert actions. Tam güven kodundan çağrılan aynı güvenlik saydam kodu, başarılı bir talebe neden olur.The same security-transparent code called from full-trust code results in a successful demand.

Güvenlik açısından kritik, güvenlik açısından şeffaf bir tersidir.Security-critical is the opposite of security-transparent. Güvenlik açısından kritik kod tam güvenle yürütülür ve tüm ayrıcalıklı işlemleri gerçekleştirebilir.Security-critical code executes with full trust and can perform all privileged operations. Güvenli kritik kod, kısmen güvenilen çağıranların erişim izni olmayan kaynakları kullanmasına izin vermediğini onaylamak için kapsamlı bir güvenlik denetimi aracılığıyla oluşturulmuş ayrıcalıklı koddur.Security-safe-critical code is privileged code that has been through an extensive security audit to confirm that it does not allow partially trusted callers to use resources they do not have permission to access.

Saydamlığı açıkça uygulamanız gerekir.You have to apply transparency explicitly. Veri işleme ve mantığını işleyen kodunuzun büyük bölümü genellikle güvenlik açısından saydam olarak işaretlenebilir, ancak ayrıcalıkların yükseltme işlemini gerçekleştiren daha az miktarda kod miktarı güvenlik açısından kritik veya güvenlik açısından güvenli olarak işaretlenir.The majority of your code that handles data manipulation and logic can typically be marked as security-transparent, whereas the lesser amount of code that performs elevations of privileges is marked as security-critical or security-safe-critical.

Önemli

Düzey 1 saydamlık, derleme kapsamıyla sınırlıdır; derlemeler arasında zorlanmaz.Level 1 transparency is limited to assembly scope; it is not enforced between assemblies. Düzey 1 saydamlık öncelikle Microsoft 'un güvenlik denetimi amacıyla kullanıldığı bir şekilde kullanılır.Level 1 transparency was primarily used within Microsoft for security audit purposes. Düzey 1 derlemesi içindeki güvenlik açısından kritik türlere ve üyelere, diğer derlemelerde güvenlik açısından saydam kod tarafından erişilebilir.Security-critical types and members within a level 1 assembly can be accessed by security-transparent code in other assemblies. Tüm düzey 1 güvenlik açısından kritik türlerde ve üyelerde tam güven için bağlantı talepleri gerçekleştirmeniz önemlidir.It is important that you perform link demands for full trust in all your level 1 security-critical types and members. Güvenlik açısından kritik olan türler ve Üyeler, çağıranların tür veya üye tarafından erişilen korunan kaynaklar için izinlere sahip olduğunu da doğrulamamalıdır.Security-safe-critical types and members must also confirm that callers have permissions for protected resources that are accessed by the type or member.

.NET Framework önceki sürümleriyle geriye dönük uyumluluk için, saydamlık öznitelikleriyle açıklama eklenmiş olmayan tüm Üyeler güvenlik açısından kritik olarak kabul edilir.For backward compatibility with earlier versions of the .NET Framework, all members that are not annotated with transparency attributes are considered to be security-safe-critical. Açıklamalı olmayan tüm türler saydam olarak değerlendirilir.All types that are not annotated are considered to be transparent. Saydamlığı doğrulamaya yönelik bir statik analiz kuralı yok.There are no static analysis rules to validate transparency. Bu nedenle, çalışma zamanında saydam hatalarda hata ayıklaması yapmanız gerekebilir.Therefore, you may need to debug transparency errors at run time.

Saydamlık öznitelikleriTransparency Attributes

Aşağıdaki tabloda, saydamlığa yönelik kodunuza açıklama eklemek için kullandığınız üç öznitelik açıklanmaktadır.The following table describes the three attributes that you use to annotate your code for transparency.

ÖznitelikAttribute AçıklamaDescription
SecurityTransparentAttribute Yalnızca derleme düzeyinde izin verilir.Allowed only at the assembly level. Derlemedeki tüm türleri ve üyeleri güvenlik açısından saydam olarak tanımlar.Identifies all types and members in the assembly as security-transparent. Derleme, güvenlik açısından kritik kod içeremez.The assembly cannot contain any security-critical code.
SecurityCriticalAttribute Derleme düzeyinde özelliği olmadan kullanıldığında Scope , derlemedeki tüm kodu varsayılan olarak güvenlik açısından saydam olarak tanımlar, ancak derlemenin güvenlik açısından kritik kod içerebileceğini gösterir.When used at the assembly level without the Scope property, identifies all code in the assembly as security-transparent by default, but indicates that the assembly may contain security-critical code.

Sınıf düzeyinde kullanıldığında, sınıfı veya yöntemi, sınıfın üyelerini değil, güvenlik açısından kritik olarak tanımlar.When used at the class level, identifies the class or method as security-critical, but not the members of the class. Tüm üyelerin güvenlik açısından kritik olmasını sağlamak için Scope özelliğini olarak ayarlayın Everything .To make all the members security-critical, set the Scope property to Everything.

Üye düzeyinde kullanıldığında, özniteliği yalnızca o üye için geçerlidir.When used at the member level, the attribute applies only to that member.

Güvenlik açısından kritik olarak tanımlanan sınıf veya üye, ayrıcalık yükseltme işlemini gerçekleştirebilir.The class or member identified as security-critical can perform elevations of privilege. Önemli: Düzey 1 saydamlıkla, güvenlik açısından kritik türler ve Üyeler, derleme dışından çağrıldığında güvenlik açısından kritik öneme sahip olarak değerlendirilir.Important: In level 1 transparency, security-critical types and members are treated as security-safe-critical when they are called from outside the assembly. Ayrıcalık yükselmesine engel olmak için, güvenlik açısından kritik türleri ve üyeleri tam güven için bir bağlantı talebi ile korumanız gerekir.You should protect security-critical types and members with a link demand for full trust to avoid unauthorized elevation of privilege.
SecuritySafeCriticalAttribute Derlemede güvenlik açısından saydam kod tarafından erişilebilen güvenlik açısından kritik kodu belirler.Identifies security-critical code that can be accessed by security-transparent code in the assembly. Aksi takdirde, güvenlik açısından saydam kod aynı derlemede özel veya iç güvenlik açısından kritik üyelere erişemez.Otherwise, security-transparent code cannot access private or internal security-critical members in the same assembly. Bunun yapılması, güvenlik açısından kritik kodu etkiler ve olası ayrıcalıkların beklenmedik şekilde yükselmesine neden olur.Doing so would influence security-critical code and make unexpected elevations of privilege possible. Güvenliğe güvenli kritik kod, ciddi bir güvenlik denetimine gitmelidir.Security-safe-critical code should undergo a rigorous security audit. Note: Güvenlik açısından kritik olan türler ve Üyeler, çağıranın korumalı kaynaklara erişme yetkisi olup olmadığını belirlemede çağıranların izinlerini doğrulamalıdır.Note: Security-safe-critical types and members must validate the permissions of callers to determine whether the caller has authority to access protected resources.

SecuritySafeCriticalAttributeÖzniteliği, güvenlik açısından saydam kodun aynı derlemede bulunan güvenlik açısından kritik üyelere erişmesini sağlar.The SecuritySafeCriticalAttribute attribute enables security-transparent code to access security-critical members in the same assembly. Derlemelerinizdeki güvenlik açısından saydam ve kritik güvenlik kodunu iki derlemeye ayırarak göz önünde bulundurun.Consider the security-transparent and security-critical code in your assembly as separated into two assemblies. Güvenliği saydam kod, güvenlik açısından kritik kodun özel veya iç üyelerini göremez.The security-transparent code would not be able to see the private or internal members of the security-critical code. Ayrıca, güvenlik açısından kritik kod genel arabirimine erişim için genellikle denetlenir.Additionally, the security-critical code is generally audited for access to its public interface. Özel veya iç durumun derleme dışında erişilebilir olması beklenmez; durumu yalıtılmış tutmak isteyebilirsiniz.You would not expect a private or internal state to be accessible outside the assembly; you would want to keep the state isolated. SecuritySafeCriticalAttributeÖznitelik, gerektiğinde yalıtımın geçersiz kılınmasına izin verirken, güvenlik açısından saydam ve kritik güvenlik kodu arasında durum yalıtımı sağlar.The SecuritySafeCriticalAttribute attribute maintains the isolation of state between security-transparent and security-critical code while providing the ability to override the isolation when it is necessary. Bu Üyeler ile işaretlenmedikçe güvenlik açısından saydam kod özel veya iç güvenlik açısından kritik koda erişemez SecuritySafeCriticalAttribute .Security-transparent code cannot access private or internal security-critical code unless those members have been marked with SecuritySafeCriticalAttribute. Uygulamasını uygulamadan önce SecuritySafeCriticalAttribute , üyenin herkese açık gibi çalıştığını denetleyin.Before applying the SecuritySafeCriticalAttribute, audit that member as if it were publicly exposed.

Bütünleştirilmiş kod genelinde ek açıklamaAssembly-wide Annotation

Aşağıdaki tabloda, derleme düzeyinde güvenlik özniteliklerini kullanmanın etkileri açıklanmaktadır.The following table describes the effects of using security attributes at the assembly level.

Derleme özniteliğiAssembly attribute Derleme durumuAssembly state
Kısmen güvenilen bir derlemede öznitelik yokNo attribute on a partially trusted assembly Tüm türler ve Üyeler saydamdır.All types and members are transparent.
Tam güvenilir bir derlemede (genel derleme önbelleğinde veya ' de tam güven olarak tanımlanan) öznitelik yok AppDomainNo attribute on a fully trusted assembly (in the global assembly cache or identified as full trust in the AppDomain) Tüm türler saydamdır ve tüm Üyeler güvenlik açısından güvenlidir.All types are transparent and all members are security-safe-critical.
SecurityTransparent Tüm türler ve Üyeler saydamdır.All types and members are transparent.
SecurityCritical(SecurityCriticalScope.Everything) Tüm türler ve Üyeler güvenlik açısından kritik öneme sahiptir.All types and members are security-critical.
SecurityCritical Tüm kod varsayılan olarak saydam olur.All code defaults to transparent. Ancak, ayrı türler ve üyelerin diğer öznitelikleri olabilir.However, individual types and members can have other attributes.

Güvenlik saydamlığı örnekleriSecurity Transparency Examples

.NET Framework 2,0 saydamlık kurallarını (düzey 1 saydamlık) kullanmak için aşağıdaki derleme ek açıklamasını kullanın:To use the .NET Framework 2.0 transparency rules (level 1 transparency), use the following assembly annotation:

[assembly: SecurityRules(SecurityRuleSet.Level1)]  

Derlemenin herhangi bir kritik kod içermediğini ve ayrıcalıkları herhangi bir şekilde yükselmediğini belirtmek için bir derlemenin tamamını saydam hale getirmek isterseniz, aşağıdaki öznitelik ile derlemeye açıkça saydamlık ekleyebilirsiniz:If you want to make a whole assembly transparent to indicate that the assembly does not contain any critical code and does not elevate privileges in any way, you can explicitly add transparency to the assembly with the following attribute:

[assembly: SecurityTransparent]  

Aynı derlemede kritik ve saydam kodu karıştırmak istiyorsanız, derlemenin SecurityCriticalAttribute kritik kod içerebileceğini belirtmek için derlemeyi özniteliğiyle işaretleyerek başlayın:If you want to mix critical and transparent code in the same assembly, start by marking the assembly with the SecurityCriticalAttribute attribute to indicate that the assembly can contain critical code, as follows:

[assembly: SecurityCritical]  

Güvenlik açısından kritik eylemler gerçekleştirmek istiyorsanız, SecurityCriticalAttribute Aşağıdaki kod örneğinde gösterildiği gibi, kritik eylemi gerçekleştirecek kodu, başka bir öznitelikle gerçekleştirilecek şekilde açıkça işaretlemeniz gerekir:If you want to perform security-critical actions, you must explicitly mark the code that will perform the critical action with another SecurityCriticalAttribute attribute, as shown in the following code example:

[assembly: SecurityCritical]  
public class A  
{  
    [SecurityCritical]  
    private void Critical()  
    {  
        // critical  
    }  
  
    public int SomeProperty  
    {  
        get {/* transparent */ }  
        set {/* transparent */ }  
    }  
}  
public class B  
{
    internal string SomeOtherProperty  
    {  
        get { /* transparent */ }  
        set { /* transparent */ }  
    }  
}  

Önceki kod, Critical açıkça güvenlik açısından kritik olarak işaretlenen yöntemi dışında saydamdır.The previous code is transparent except for the Critical method, which is explicitly marked as security-critical. Saydamlık, derleme düzeyi özniteliğiyle bile varsayılan ayardır SecurityCriticalAttribute .Transparency is the default setting, even with the assembly-level SecurityCriticalAttribute attribute.

Ayrıca bkz.See also