Sicurezza per l'accesso al codiceCode Access Security

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.

Gli attuali computer con connessione elevata sono spesso esposti a codice che deriva da origini svariate e magari sconosciute.Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Il codice può essere allegato a un messaggio di posta elettronica, contenuto in documenti o scaricato tramite Internet.Code can be attached to email, contained in documents, or downloaded over the Internet. Sfortunatamente, molti utenti hanno sperimentato in prima persona gli effetti dei codici mobili dannosi, tra cui virus e worm, che possono danneggiare o eliminare definitivamente i dati e costare tempo e denaro.Unfortunately, many computer users have experienced firsthand the effects of malicious mobile code, including viruses and worms, which can damage or destroy data and cost time and money.

La maggior parte dei comuni meccanismi di sicurezza concede agli utenti diritti basati sulle credenziali di accesso (in genere una password) e limita le risorse (spesso directory e file) a cui l'utente può accedere.Most common security mechanisms give rights to users based on their logon credentials (usually a password) and restrict resources (often directories and files) that the user is allowed to access. Tuttavia, questo approccio non riesce a risolvere alcuni problemi: gli utenti ottengono il codice da molte origini, alcune delle quali potrebbero non essere affidabili, il codice può contenere bug o vulnerabilità che permettono ai malware di sfruttarlo e a volte il codice esegue operazioni di cui l'utente non è a conoscenza.However, this approach fails to address several issues: users obtain code from many sources, some of which might be unreliable; code can contain bugs or vulnerabilities that enable it to be exploited by malicious code; and code sometimes does things that the user does not know it will do. Di conseguenza, quando utenti attenti e affidabili eseguono software dannoso o con errori, possono verificarsi danni al sistemi del computer e ai dati privati.As a result, computer systems can be damaged and private data can be leaked when cautious and trustworthy users run malicious or error-filled software. La maggior parte dei meccanismi di sicurezza del sistema operativo richiede che ogni parte del codice da eseguire sia completamente attendibile, ad eccezione forse degli script di una pagina Web.Most operating system security mechanisms require that every piece of code must be completely trusted in order to run, except perhaps for scripts on a Web page. Dunque esiste ancora la necessità di un meccanismo di sicurezza applicabile su vasta scala, che consenta di eseguire il codice derivante dal sistema di un computer in modo protetto su un altro sistema, anche quando non esiste alcuna relazione di trust tra i sistemi.Therefore, there is still a need for a widely applicable security mechanism that allows code originating from one computer system to execute with protection on another system, even when there is no trust relationship between the systems.

.NET Framework fornisce un meccanismo di sicurezza, detto sicurezza dall'accesso di codice, che permette di proteggere i sistemi dei computer dal codice mobile dannoso, consentendo così di eseguire in modo protetto il codice di origine sconosciuta, e di impedire al codice attendibile di compromettere la sicurezza intenzionalmente o accidentalmente.The .NET Framework provides a security mechanism called code access security to help protect computer systems from malicious mobile code, to allow code from unknown origins to run with protection, and to help prevent trusted code from intentionally or accidentally compromising security. Mediante la sicurezza dall'accesso di codice è possibile considerare il codice come attendibile a vari livelli, a seconda dell'origine del codice e di altri aspetti relativi all'identità del codice.Code access security enables code to be trusted to varying degrees depending on where the code originates and on other aspects of the code's identity. La sicurezza dall'accesso di codice applica anche i diversi livelli di attendibilità al codice, riducendo al minimo la quantità di codice che deve essere completamente attendibile per poter essere eseguito.Code access security also enforces the varying levels of trust on code, which minimizes the amount of code that must be fully trusted in order to run. L'uso della sicurezza dall'accesso di codice può ridurre la probabilità che il codice venga usato in modo improprio da malware o da codice con errori.Using code access security can reduce the likelihood that your code will be misused by malicious or error-filled code. Può ridurre la responsabilità dell'utente, perché è possibile specificare il set di operazioni che possono essere eseguite dal codice.It can reduce your liability, because you can specify the set of operations your code should be allowed to perform. La sicurezza dall'accesso di codice permette anche di ridurre al minimo i danni che possono derivare da vulnerabilità di protezione nel codice.Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

Nota

Sono state apportate importanti modifiche alla sicurezza dall'accesso di codice nel .NET Framework 4.Major changes have been made to code access security in the .NET Framework 4. La modifica più rilevante è stata la trasparenza della sicurezza, ma sono presenti anche altre modifiche significative che influiscono sulla sicurezza dall'accesso di codice.The most notable change has been security transparency, but there are also other significant changes that affect code access security. Per informazioni su queste modifiche, vedere modifiche di sicurezza.For information about these changes, see Security Changes.

La sicurezza dall'accesso di codice influisce principalmente sul codice di libreria e sulle applicazioni parzialmente attendibili.Code access security primarily affects library code and partially trusted applications. Gli sviluppatori di librerie devono proteggere il codice da accesso non autorizzato da applicazioni parzialmente attendibili.Library developers must protect their code from unauthorized access from partially trusted applications. Le applicazioni parzialmente attendibili sono applicazioni che vengono caricate da origini esterne, ad esempio da Internet.Partially trusted applications are applications that are loaded from external sources such as the Internet. Le applicazioni installate nel desktop o nella rete Intranet locale vengono eseguite con attendibilità totale.Applications that are installed on your desktop or on the local intranet run in full trust. Le applicazioni con attendibilità totale non sono interessate dalla sicurezza dall'accesso di codice a meno che non siano contrassegnate come SecurityTransparent, perché sono completamente attendibili.Full-trust applications are not affected by code access security unless they are marked as security-transparent, because they are fully trusted. L'unica limitazione per le applicazioni con attendibilità totale è che le applicazioni contrassegnate con l'attributo SecurityTransparentAttribute non possono chiamare il codice contrassegnato con l'attributo SecurityCriticalAttribute.The only limitation for full-trust applications is that applications that are marked with the SecurityTransparentAttribute attribute cannot call code that is marked with the SecurityCriticalAttribute attribute. Le applicazioni parzialmente attendibili devono essere eseguite in una sandbox (ad esempio, in Internet Explorer), per poter applicare la sicurezza dall'accesso di codice.Partially trusted applications must be run in a sandbox (for example, in Internet Explorer) so that code access security can be applied. Se si scarica un'applicazione da Internet e si tenta di eseguirla dal desktop, verrà ricevuto un NotSupportedException messaggio con il messaggio: "È stato effettuato un tentativo di caricare un assembly da un percorso di rete che avrebbe causato la sandboxing dell'assembly nelle versioni precedenti del .NET Framework.If you download an application from the Internet and try to run it from your desktop, you will get a NotSupportedException with the message: "An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. In questa versione di .NET Framework i criteri di sicurezza dall'accesso di codice non sono abilitati per impostazione predefinita, pertanto questo tipo di caricamento può risultare pericoloso".This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous." Se si è certi che l'applicazione può essere attendibile, è possibile abilitarla per l'esecuzione come attendibilità totale usando l' <elemento loadFromRemoteSources >.If you are sure that the application can be trusted, you can enable it to be run as full trust by using the <loadFromRemoteSources> element. Per informazioni sull'esecuzione di un'applicazione in una sandbox, vedere Procedura: Eseguire codice parzialmente attendibile in un oggetto sandbox.For information about running an application in a sandbox, see How to: Run Partially Trusted Code in a Sandbox.

Tutto il codice gestito destinato a Common Language Runtime sfrutta i vantaggi della sicurezza dall'accesso di codice, anche se tale codice non effettua un'unica chiamata alla sicurezza dall'accesso di codice.All managed code that targets the common language runtime receives the benefits of code access security, even if that code does not make a single code access security call. Per altre informazioni, vedere Code Access Security Basics (Nozioni di base sulla sicurezza dell'accesso di codice).For more information, see Code Access Security Basics.

Funzioni chiave della sicurezza dall'accesso di codiceKey Functions of Code Access Security

La sicurezza dall'accesso di codice consente di limitare l'accesso del codice alle risorse e alle operazioni protette.Code access security helps limit the access that code has to protected resources and operations. In .NET Framework la sicurezza dall'accesso di codice svolge le seguenti funzioni:In the .NET Framework, code access security performs the following functions:

  • Definizione di autorizzazioni e set di autorizzazioni che rappresentano il diritto di accedere a varie risorse di sistema.Defines permissions and permission sets that represent the right to access various system resources.

  • Possibilità di esigere dai chiamanti del codice il possesso di autorizzazioni specifiche.Enables code to demand that its callers have specific permissions.

  • Possibilità di esigere dai chiamanti del codice il possesso di una firma digitale, in modo che solo i chiamanti appartenenti a un'organizzazione o a un sito particolare siano autorizzati a chiamare il codice sicuro.Enables code to demand that its callers possess a digital signature, thus allowing only callers from a particular organization or site to call the protected code.

  • Applicazione di restrizioni sul codice in fase di esecuzione confrontando le autorizzazioni concesse a ogni chiamante dello stack di chiamate con le autorizzazioni effettivamente necessarie.Enforces restrictions on code at run time by comparing the granted permissions of every caller on the call stack to the permissions that callers must have.

Analisi dello stack di chiamateWalking the Call Stack

Per determinare se il codice è autorizzato ad accedere a una risorsa o a eseguire un'operazione, il sistema di sicurezza del runtime analizza lo stack di chiamate, confrontando le autorizzazioni concesse di ogni chiamante con l'autorizzazione richiesta.To determine whether code is authorized to access a resource or perform an operation, the runtime's security system walks the call stack, comparing the granted permissions of each caller to the permission being demanded. Se un qualsiasi chiamante nello stack di chiamate non dispone dell'autorizzazione richiesta, viene generata un'eccezione di sicurezza e l'accesso viene rifiutato.If any caller in the call stack does not have the demanded permission, a security exception is thrown and access is refused. L'analisi dello stack è progettata per impedire attacchi luring, in cui un codice meno attendibile chiama un codice altamente attendibile e lo usa per eseguire azioni non autorizzate.The stack walk is designed to help prevent luring attacks, in which less-trusted code calls highly trusted code and uses it to perform unauthorized actions. La richiesta delle autorizzazioni di tutti i chiamanti in fase di esecuzione ha effetto sulle prestazioni, ma è fondamentale per proteggere il codice dagli attacchi luring da parte di codice meno attendibile.Demanding permissions of all callers at run time affects performance, but it is essential to help protect code from luring attacks by less-trusted code. Per ottimizzare le prestazioni, è possibile far analizzare al codice meno percorsi dello stack. Tuttavia, è necessario assicurarsi ogni volta di non esporre un punto debole nella sicurezza.To optimize performance, you can have your code perform fewer stack walks; however, you must be sure that you do not expose a security weakness whenever you do this.

La figura seguente mostra il risultato dell'analisi dello stack quando un metodo in Assembly A4 richiede che i chiamanti dispongano dell'autorizzazione P.The following illustration shows the stack walk that results when a method in Assembly A4 demands that its callers have permission P.

Sicurezza dall'accesso di codiceCode access security
Analisi dello stack di sicurezzaSecurity stack walk

TitoloTitle DescrizioneDescription
Nozioni fondamentali sulla sicurezza per l’accesso al codiceCode Access Security Basics Descrive la sicurezza dall'accesso di codice e gli usi più comuni.Describes code access security and its most common uses.
Codice SecurityTransparent, livello 2Security-Transparent Code, Level 2 Viene descritto il modello di trasparenza della sicurezza nel .NET Framework 4.Describes the security transparency model in the .NET Framework 4.
Uso di librerie da codice parzialmente attendibileUsing Libraries from Partially Trusted Code Descrive come abilitare le librerie per usarle con codice non gestito e come usare le librerie provenienti da codice non gestito.Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Concetti chiave sulla sicurezzaKey Security Concepts Fornisce una panoramica di diversi termini e concetti chiave usati nel sistema di sicurezza di .NET Framework.Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Sicurezza basata sui ruoliRole-Based Security Descrive come incorporare la sicurezza basata sui ruoli.Describes how to incorporate security based on roles.
Cryptographic ServicesCryptographic Services Descrive come incorporare la crittografia nelle applicazioni.Describes how to incorporate cryptography into your applications.