Utilizzo di librerie da codice parzialmente attendibileUsing Libraries from Partially Trusted 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.

Nota

In questo argomento viene descritto il comportamento degli assembly con nome sicuro e si applica solo a livello 1 assembly.This topic addresses the behavior of strong-named assemblies and applies only to Level 1 assemblies. Codice SecurityTransparent, livello 2 assembly di .NET Framework 4.NET Framework 4 o versioni successive non sono interessati dai nomi sicuri.Security-Transparent Code, Level 2 assemblies in the .NET Framework 4.NET Framework 4 or later are not affected by strong names. Per ulteriori informazioni sulle modifiche al sistema di sicurezza, vedere modifiche della sicurezza.For more information about changes to the security system, see Security Changes.

Le applicazioni che ritenute del tutto attendibili dall'host o sandbox non è consentito chiamare condiviso librerie gestite, a meno che il writer delle librerie consenta in modo specifico mediante l'utilizzo del AllowPartiallyTrustedCallersAttribute attributo.Applications that receive less than full trust from their host or sandbox are not allowed to call shared managed libraries unless the library writer specifically allows them to through the use of the AllowPartiallyTrustedCallersAttribute attribute. Di conseguenza, i writer delle applicazioni devono tenere presente che alcune librerie non saranno disponibili da un contesto parzialmente attendibile.Therefore, application writers must be aware that some libraries will not be available to them from a partially trusted context. Per impostazione predefinita, tutto il codice che viene eseguito in un contesto di attendibilità parziale sandbox e non in elenco di assembly totalmente attendibili è parzialmente attendibile.By default, all code that executes in a partial-trust sandbox and is not in the list of full-trust assemblies is partially trusted. Se non si prevede che il codice venga eseguito da un contesto parzialmente attendibile o venga chiamato da un codice parzialmente attendibile, non sono rilevanti le informazioni contenute in questa sezione.If you do not expect your code to be executed from a partially trusted context or to be called by partially trusted code, you do not have to be concerned about the information in this section. Se tuttavia si scrive codice che deve interagire con codice parzialmente attendibile o agire da un contesto parzialmente attendibile, si devono prendere in considerazione i seguenti fattori:However, if you write code that must interact with partially trusted code or operate from a partially trusted context, you should consider the following factors:

  • Le librerie devono essere firmate con un nome sicuro per essere condivise da più applicazioni.Libraries must be signed with a strong name in order to be shared by multiple applications. I nomi sicuri consentono al codice di essere inserito in Global Assembly Cache o aggiunto all'elenco totalmente attendibile di un AppDomain di sandboxing e consente agli utenti di verificare da quale altro utente ha origine una particolare parte di codice mobile.Strong names allow your code to be placed in the global assembly cache or added to the full-trust list of a sandboxing AppDomain, and allow consumers to verify that a particular piece of mobile code actually originates from you.

  • Per impostazione predefinita, con nome sicuro livello 1 librerie condivise eseguono implicita LinkDemand per l'attendibilità totale automaticamente, senza il writer delle librerie debba eseguire alcuna operazione.By default, strong-named Level 1 shared libraries perform an implicit LinkDemand for full trust automatically, without the library writer having to do anything.

  • Se un chiamante non dispone dell'attendibilità totale ma continua a chiamare quel tipo di libreria, il runtime genera un'eccezione SecurityException e al chiamante non è consentito collegarsi alla libreria.If a caller does not have full trust but still tries to call such a library, the runtime throws a SecurityException and the caller is not allowed to link to the library.

  • Per disabilitare l'automatico LinkDemand e impedire che venga generata un'eccezione, è possibile inserire il AllowPartiallyTrustedCallersAttribute attributo nell'ambito degli assembly di una scheda SCSI libreria.In order to disable the automatic LinkDemand and prevent the exception from being thrown, you can place the AllowPartiallyTrustedCallersAttribute attribute on the assembly scope of a shared library. Questo attributo consente alle librerie di essere chiamate da un codice gestito parzialmente attendibile.This attribute allows your libraries to be called from partially trusted managed code.

  • Il codice parzialmente attendibile a cui è concesso l'accesso a una libreria con questo attributo continua a essere oggetto di altre restrizioni definite da AppDomain.Partially trusted code that is granted access to a library with this attribute is still subject to further restrictions defined by the AppDomain.

  • Non è a livello di codice per codice parzialmente attendibile di chiamare una libreria che non dispone di AllowPartiallyTrustedCallersAttribute attributo.There is no programmatic way for partially trusted code to call a library that does not have the AllowPartiallyTrustedCallersAttribute attribute.

Le librerie che sono private per un'applicazione specifica non richiedono un nome sicuro o AllowPartiallyTrustedCallersAttribute attributo e non può fare riferimento codice potenzialmente dannoso di fuori dell'applicazione.Libraries that are private to a specific application do not require a strong name or the AllowPartiallyTrustedCallersAttribute attribute and cannot be referenced by potentially malicious code outside the application. Questo tipo di codice è protetto da un uso improprio intenzionale o non intenzionale mediante codice mobile parzialmente attendibile senza altre operazioni da parte dello sviluppatore.Such code is protected against intentional or unintentional misuse by partially trusted mobile code without the developer having to do anything extra.

È consigliabile abilitare in modo esplicito l'utilizzo di codice parzialmente attendibile per i tipi di codice seguenti:You should consider explicitly enabling use by partially trusted code for the following types of code:

  • Codice che sia stato attentamente testato vulnerabilità della sicurezza e sia conforme con le istruzioni riportate in indicazioni per la generazione di codice protetto.Code that has been diligently tested for security vulnerabilities and is in compliance with the guidelines described in Secure Coding Guidelines.

  • Librerie del codice con nome sicuro che sono scritte in modo specifico per scenari parzialmente attendibili.Strong-named code libraries that are specifically written for partially trusted scenarios.

  • Tutti i componenti (parzialmente o totalmente attendibili) firmati con un nome sicuro che saranno chiamati dal codice scaricato da Internet.Any components (whether partially or fully trusted) signed with a strong name that will be called by code that is downloaded from the Internet.

Nota

Alcune classi nella libreria di classi .NET Framework non dispone di AllowPartiallyTrustedCallersAttribute attributo e non può essere chiamato da codice parzialmente attendibile.Some classes in the .NET Framework class library do not have the AllowPartiallyTrustedCallersAttribute attribute and cannot be called by partially trusted code.

Vedere ancheSee Also

Sicurezza dall'accesso di codiceCode Access Security