Codice SecurityTransparentSecurity-Transparent Code

Attenzione

Sicurezza dall'accesso di codice e codice parzialmente attendibileCode Access Security and Partially Trusted Code

.NET Framework fornisce un meccanismo denominato sicurezza dall'accesso di codice, che consente di applicare vari livelli di attendibilità a codice diverso in esecuzione nella stessa applicazione.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). La sicurezza per l'accesso di codice in .NET Framework non deve essere usata come meccanismo per l'applicazione dei limiti di sicurezza in base alla creazione di codice o altri aspetti di identità.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Le linee guida sono state modificate per specificare che la sicurezza per l'accesso di codice e il codice SecurityTransparent non saranno supportati come limiti di sicurezza con codice parzialmente attendibile, soprattutto nel caso di codice di origine sconosciuta.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Non è consigliabile caricare ed eseguire codice di origine sconosciuta in assenza di misure di sicurezza alternative.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Questi criteri si applicano a tutte le versioni di .NET Framework, ma non alla versione di .NET Framework inclusa in Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

La sicurezza implica tre meccanismi che interagiscono tra loro: il sandboxing, le autorizzazioni e l'imposizione.Security involves three interacting pieces: sandboxing, permissions, and enforcement. Per sandboxing si intende la pratica basata sulla creazione di domini isolati in cui parte del codice viene trattata come codice completamente attendibile, mentre altro codice viene limitato con le autorizzazioni della concessione per il sandbox.Sandboxing refers to the practice of creating isolated domains where some code is treated as fully trusted and other code is restricted to the permissions in the grant set for the sandbox. Il codice dell'applicazione che viene eseguito all'interno della concessione del sandbox è considerato Transparent, ovvero non può eseguire operazioni che possono influire sulla sicurezza.The application code that runs within the grant set of the sandbox is considered to be transparent; that is, it cannot perform any operations that can affect security. La concessione impostata per il sandbox è determinata da un'evidenza (classe Evidence).The grant set for the sandbox is determined by evidence (Evidence class). L'evidenza identifica le autorizzazioni specifiche richieste dai sandbox e quali tipi di sandbox è possibile creare.Evidence identifies what specific permissions are required by sandboxes, and what kinds of sandboxes can be created. L'imposizione consiste nel consentire l'esecuzione di codice Transparent solo all'interno della relativa concessione.Enforcement refers to allowing transparent code to execute only within its grant set.

Importante

I criteri di sicurezza erano un elemento fondamentale nelle versioni precedenti di .NET Framework.Security policy was a key element in previous versions of the .NET Framework. A partire dal .NET Framework 4.NET Framework 4, criteri di sicurezza sono obsoleto.Starting with the .NET Framework 4.NET Framework 4, security policy is obsolete. L'eliminazione dei criteri di sicurezza non corrisponde alla trasparenza della sicurezza.The elimination of security policy is separate from security transparency. Per informazioni sugli effetti di questa modifica, vedere migrazione e compatibilità di criteri di sicurezza di accesso di codice.For information about the effects of this change, see Code Access Security Policy Compatibility and Migration.

In questo argomento viene descritto il modello di trasparenza in maggiore dettaglio.This topic describes the transparency model in more detail. Include le sezioni seguenti:It contains the following sections:

Scopo del modello di trasparenzaPurpose of the Transparency Model

La trasparenza è un meccanismo di imposizione che separa il codice che viene eseguito come parte dell'applicazione dal codice eseguito come parte dell'infrastruttura.Transparency is an enforcement mechanism that separates code that runs as part of the application from code that runs as part of the infrastructure. La trasparenza consente di creare una barriera tra il codice autorizzato a eseguire operazioni privilegiate (codice Critical), ad esempio chiamare codice nativo, e il codice che non dispone di tale autorizzazione (codice Transparent).Transparency draws a barrier between code that can do privileged things (critical code), such as calling native code, and code that cannot (transparent code). Il codice Transparent può eseguire comandi all'interno dei limiti del set di autorizzazioni in cui sta funzionando, ma non può eseguire, derivare o contenere codice Critical.Transparent code can execute commands within the bounds of the permission set it is operating in, but cannot execute, derive from, or contain critical code.

L'obiettivo principale dell'imposizione della trasparenza è fornire un meccanismo semplice e valido per isolare gruppi diversi di codice in base ai privilegi.The primary goal of transparency enforcement is to provide a simple, effective mechanism for isolating different groups of code based on privilege. Nel contesto del modello di sandboxing, questi gruppi di privilegi sono completamente attendibili (non limitati) o parzialmente attendibili (limitati al set di autorizzazioni concesso al sandbox).Within the context of the sandboxing model, these privilege groups are either fully trusted (that is, not restricted) or partially trusted (that is, restricted to the permission set granted to the sandbox).

Importante

Il modello di trasparenza va oltre la sicurezza dall'accesso di codice.The transparency model transcends code access security. La trasparenza viene applicata dal compilatore JIT e rimane applicata indipendentemente dalla concessione per un assembly, inclusa l'attendibilità totale.Transparency is enforced by the just-in-time compiler and remains in effect regardless of the grant set for an assembly, including full trust.

La trasparenza è stata introdotta in .NET Framework versione 2.0 per semplificare il modello di sicurezza e facilitare la scrittura e la distribuzione di librerie e applicazioni sicure.Transparency was introduced in the .NET Framework version 2.0 to simplify the security model, and to make it easier to write and deploy secure libraries and applications. Il codice Transparent viene usato anche in Microsoft Silverlight per semplificare lo sviluppo di applicazioni parzialmente attendibili.Transparent code is also used in Microsoft Silverlight, to simplify the development of partially trusted applications.

Nota

Quando si sviluppa un'applicazione parzialmente attendibile, è necessario tenere presenti i requisiti di autorizzazione per gli host di destinazione.When you develop a partially trusted application, you have to be aware of the permission requirements for your target hosts. È possibile sviluppare un'applicazione che usa risorse il cui uso non è consentito in alcuni host.You can develop an application that uses resources that are not allowed by some hosts. Tale applicazione verrà compilata senza errori, ma non verrà eseguita correttamente quando verrà caricata nell'ambiente di hosting.This application will compile without error, but will fail when it is loaded into the hosted environment. Se l'applicazione è stata sviluppata con Visual Studio, è possibile attivare il debug in un ambiente parzialmente attendibile o in un set di autorizzazioni limitato dall'ambiente di sviluppo.If you have developed your application using Visual Studio, you can enable debugging in partial trust or in a restricted permission set from the development environment. Per altre informazioni, vedere Procedura: Eseguire il debug di un'applicazione ClickOnce con autorizzazioni limitate.For more information, see How to: Debug a ClickOnce Application with Restricted Permissions. La funzionalità Elabora autorizzazioni fornita per le applicazioni ClickOnce è anche disponibile per le applicazioni parzialmente attendibili.The Calculate Permissions feature provided for ClickOnce applications is also available for any partially trusted application.

Torna all'inizioBack to top

Specifica del livello di trasparenzaSpecifying the Transparency Level

L'attributo SecurityRulesAttribute a livello di assembly consente di selezionare in modo esplicito le regole SecurityRuleSet che l'assembly seguirà.The assembly-level SecurityRulesAttribute attribute explicitly selects the SecurityRuleSet rules that the assembly will follow. Le regole sono organizzate in un sistema a livelli numerici, dove i livelli superiori indicano un'imposizione più severa delle regole di sicurezza.The rules are organized under a numeric level system, where higher levels mean tighter enforcement of security rules.

I livelli sono elencati di seguito.The levels are as follows:

  • Livello 2 (Level2): regole di trasparenza di .NET Framework 4.NET Framework 4.Level 2 (Level2) – the .NET Framework 4.NET Framework 4 transparency rules.

  • Livello 1 (Level1): regole di trasparenza di .NET Framework 2.0.Level 1 (Level1) – the .NET Framework 2.0 transparency rules.

La differenza principale tra i due livelli di trasparenza è che il livello 1 non applica regole di trasparenza per le chiamate provenienti dall'esterno dell'assembly ed è disponibile solo per garantire la compatibilità.The primary difference between the two transparency levels is that level 1 does not enforce transparency rules for calls from outside the assembly and is intended only for compatibility.

Importante

È necessario specificare la trasparenza di livello 1 solo per ragioni di compatibilità, ovvero specificare il livello 1 solo per codice sviluppato con .NET Framework 3.5 o versioni precedenti che usa l'attributo AllowPartiallyTrustedCallersAttribute o non usa il modello di trasparenza.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 attribute or does not use the transparency model. Usare ad esempio la trasparenza di livello 1 per assembly .NET Framework 2.0 che consentono l'uso di chiamate da chiamanti parzialmente attendibili (APTCA).For example, use level 1 transparency for .NET Framework 2.0 assemblies that allow calls from partially trusted callers (APTCA). Per il codice sviluppato per .NET Framework 4.NET Framework 4, usare sempre la trasparenza di livello 2.For code that is developed for the .NET Framework 4.NET Framework 4, always use level 2 transparency.

Trasparenza di livello 2Level 2 Transparency

La trasparenza di livello 2 è stata introdotta in .NET Framework 4.NET Framework 4.Level 2 transparency was introduced in the .NET Framework 4.NET Framework 4. I tre concetti principali di questo modello sono il codice Transparent, il codice SecuritySafeCritical e il codice SecurityCritical.The three tenets of this model are transparent code, security-safe-critical code, and security-critical code.

  • Il codice Transparent, indipendentemente dalla autorizzazioni di cui dispone e anche nel caso dell'attendibilità totale, può chiamare solo altro codice Transparent o codice SecuritySafeCritical.Transparent code, regardless of the permissions it is granted (including full trust), can call only other transparent code or security-safe-critical code. Se il codice è parzialmente attendibile, può eseguire solo azioni consentite dal set di autorizzazioni del dominio.If the code is partially trusted, it can only perform actions that are allowed by the domain’s permission set. Il codice Transparent non può eseguire le operazioni seguenti:Transparent code cannot do the following:

    • Eseguire un'operazione Assert o un'elevazione dei privilegi.Perform an Assert operation or elevation of privilege.

    • Contenere codice di tipo unsafe o non verificabile.Contain unsafe or unverifiable code.

    • Chiamare direttamente codice Critical.Directly call critical code.

    • Chiamare codice nativo o codice con l'attributo SuppressUnmanagedCodeSecurityAttribute.Call native code or code that has the SuppressUnmanagedCodeSecurityAttribute attribute.

    • Chiamare un membro protetto da LinkDemand.Call a member that is protected by a LinkDemand.

    • Ereditare dai tipi Critical.Inherit from critical types.

    Inoltre, i metodi Transparent non possono eseguire l'override di metodi virtuali Critical o implementare metodi di interfaccia Critical.In addition, transparent methods cannot override critical virtual methods or implement critical interface methods.

  • Il codice SecuritySafeCritical è completamente attendibile, ma può essere chiamato dal codice Transparent.Security-safe-critical code is fully trusted but is callable by transparent code. Espone una superficie di attacco limitata di codice con attendibilità totale.It exposes a limited surface area of full-trust code. Nel codice SafeCritical vengono eseguite verifiche della correttezza e della sicurezza.Correctness and security verifications happen in safe-critical code.

  • Il codice SecurityCritical può chiamare qualsiasi tipo di codice ed è completamente attendibile, ma non può essere chiamato da codice Transparent.Security-critical code can call any code and is fully trusted, but it cannot be called by transparent code.

Trasparenza di livello 1Level 1 Transparency

Il modello di trasparenza di livello 1 è stato introdotto in .NET Framework versione 2.0 per consentire agli sviluppatori di ridurre la quantità di codice soggetto a un controllo di sicurezza.The level 1 transparency model was introduced in the .NET Framework version 2.0 to enable developers to reduce the amount of code that is subject to a security audit. Nonostante la trasparenza di livello 1 sia disponibile pubblicamente nella versione 2.0, è stata usata principalmente solo all'interno di Microsoft per operazioni di controllo della sicurezza.Although level 1 transparency was publicly available in version 2.0, it was primarily used only within Microsoft for security auditing purposes. Consente agli sviluppatori di dichiarare con annotazioni quali tipi e membri possono eseguire elevazioni di sicurezza e altre azioni attendibili (SecurityCritical) e quali invece non possono eseguirle (SecurityTransparent).Through annotations, developers are able to declare which types and members can perform security elevations and other trusted actions (security-critical) and which cannot (security-transparent). Il codice identificato come Transparent non richiede un alto livello di controllo della sicurezza.Code that is identified as transparent does not require a high degree of security auditing. La trasparenza di livello 1 indica che l'imposizione della trasparenza è limitata all'interno dell'assembly.Level 1 transparency states that the transparency enforcement is limited to within the assembly. In altre parole, qualsiasi tipo o membro pubblico identificato come SecurityCritical è tale solo all'interno dell'assembly.In other words, any public types or members that are identified as security-critical are security-critical only within the assembly. Se si vuole applicare la sicurezza per determinati tipi e membri quando vengono chiamati dall'esterno dell'assembly, è necessario usare le richieste di collegamento per l'attendibilità totale.If you want to enforce security for those types and members when they are called from outside the assembly, you must use link demands for full trust. In caso contrario, i tipi e i membri SecurityCritical pubblicamente visibili vengono trattati come SecuritySafeCritical e possono essere chiamati da codice parzialmente attendibile esterno all'assembly.If you do not, publicly visible security-critical types and members are treated as security-safe-critical and can be called by partially trusted code outside the assembly.

Il modello di trasparenza di livello 1 presenta le limitazioni seguenti:The level 1 transparency model has the following limitations:

  • I tipi e i membri SecurityCritical pubblici sono accessibili da codice SecurityTransparent.Security-critical types and members that are public are accessible from security-transparent code.

  • Le annotazioni di trasparenza vengono applicate solo all'interno di un assembly.The transparency annotations are enforced only within an assembly.

  • I tipi e i membri SecurityCritical devono usare richieste di collegamento per applicare la sicurezza per le chiamate provenienti dall'esterno dell'assembly.Security-critical types and members must use link demands to enforce security for calls from outside the assembly.

  • Le regole di ereditarietà non vengono applicate.Inheritance rules are not enforced.

  • Esiste la possibilità che il codice Transparent esegua operazioni dannose quando viene eseguito con attendibilità totale.The potential exists for transparent code to do harmful things when run in full trust.

Torna all'inizioBack to top

Imposizione della trasparenzaTransparency Enforcement

Le regole di trasparenza non vengono applicate fino a quando la trasparenza non viene calcolata.Transparency rules are not enforced until transparency is calculated. In tale fase, viene generata un'eccezione InvalidOperationException se una regola di trasparenza risulta violata.At that time, an InvalidOperationException is thrown if a transparency rule is violated. Il momento in cui viene calcolata la trasparenza dipende da vari fattori e non può essere previsto.The time that transparency is calculated depends on multiple factors and cannot be predicted. Il calcolo avviene il più tardi possibile.It is calculated as late as possible. In .NET Framework 4.NET Framework 4, il calcolo della trasparenza a livello di assembly si verifica prima di quanto avvenga in .NET Framework 2.0.In the .NET Framework 4.NET Framework 4, assembly-level transparency calculation occurs sooner than it does in the .NET Framework 2.0. L'unica garanzia è che il calcolo della trasparenza si verifica nel momento in cui è necessario.The only guarantee is that transparency calculation will occur by the time it is needed. È un meccanismo analogo al modo in cui il compilatore JIT (Just-In-Time) può modificare il punto in cui un metodo viene compilato e gli eventuali errori in tale metodo vengono rilevati.This is similar to how the just-in-time (JIT) compiler can change the point when a method is compiled and any errors in that method are detected. Il calcolo della trasparenza è invisibile se il codice non contiene errori di trasparenza.Transparency calculation is invisible if your code does not have any transparency errors.

Vedere ancheSee Also

Il codice SecurityTransparent, livello 1Security-Transparent Code, Level 1
Codice SecurityTransparent, livello 2Security-Transparent Code, Level 2