Protezione delle informazioni di connessioneProtecting Connection Information

La protezione dell'accesso all'origine dati è uno dei principali obiettivi da raggiungere quando si imposta la sicurezza di un'applicazione.Protecting access to your data source is one of the most important goals when securing an application. Una stringa di connessione presenta una potenziale vulnerabilità se non è protetta.A connection string presents a potential vulnerability if it is not secured. Se le informazioni di connessione vengono archiviate in testo normale o mantenute nella memoria, si rischia di compromettere l'intero sistema.Storing connection information in plain text or persisting it in memory risks compromising your entire system. Stringhe di connessione incorporate nel codice sorgente possono essere letto utilizzando il Ildasm.exe (Disassembler IL) per visualizzare Microsoft intermediate language (MSIL) in un assembly compilato.Connection strings embedded in your source code can be read using the Ildasm.exe (IL Disassembler) to view Microsoft intermediate language (MSIL) in a compiled assembly.

Le vulnerabilità di sicurezza che riguardano le stringhe di connessione possono presentarsi in base al tipo di autenticazione usato, alla modalità con cui le stringhe di connessione vengono mantenute nella memoria e su disco e alle tecniche usate per crearle in fase di esecuzione.Security vulnerabilities involving connection strings can arise based on the type of authentication used, how connection strings are persisted in memory and on disk, and the techniques used to construct them at run time.

Usa autenticazione di WindowsUse Windows Authentication

Per limitare l'accesso all'origine dati, è necessario proteggere le informazioni di connessione quali, ad esempio, identificatore utente, password e nome dell'origine dati.To help limit access to your data source, you must secure connection information such as user ID, password, and data source name. Per evitare di esporre informazioni utente, è consigliabile utilizzare l'autenticazione di Windows (talvolta detto la sicurezza integrata) laddove possibile.In order to avoid exposing user information, we recommend using Windows authentication (sometimes referred to as integrated security) wherever possible. L'autenticazione di Windows viene specificata in una stringa di connessione usando le parole chiave Integrated Security o Trusted_Connection, eliminando la necessità di usare un ID utente e una password.Windows authentication is specified in a connection string by using the Integrated Security or Trusted_Connection keywords, eliminating the need to use a user ID and password. Tramite l'autenticazione di Windows, gli utenti vengono autenticati da Windows e l'accesso alle risorse di server e database viene determinato concedendo autorizzazioni a utenti e gruppi di Windows.When using Windows authentication, users are authenticated by Windows, and access to server and database resources is determined by granting permissions to Windows users and groups.

Nei casi in cui non sia possibile usare l'autenticazione di Windows, è necessario prestare una maggiore attenzione perché le credenziali utente sono esposte nella stringa di connessione.For situations where it is not possible to use Windows authentication, you must use extra care because user credentials are exposed in the connection string. Nelle applicazioni ASP.NET è possibile configurare un account di Windows come identità fissa usata per le connessioni a database e ad altre risorse di rete.In an ASP.NET application, you can configure a Windows account as a fixed identity that is used to connect to databases and other network resources. Si abilita la rappresentazione dell'elemento identity nel Web. config file e specificare un nome utente e una password.You enable impersonation in the identity element in the web.config file and specify a user name and password.

<identity impersonate="true"   
        userName="MyDomain\UserAccount"   
        password="*****" />  

L'account con identità fissa deve avere privilegi limitati che includono solo le autorizzazioni necessarie nel database.The fixed identity account should be a low-privilege account that has been granted only necessary permissions in the database. È inoltre necessario crittografare il file di configurazione in modo da non esporre il nome utente e la password in testo non crittografato.In addition, you should encrypt the configuration file so that the user name and password are not exposed in clear text.

Evitare di archiviare le stringhe di connessione per OleDbConnection in un file di collegamento dati universale (UDL).Avoid storing connection strings for an OleDbConnection in a Universal Data Link (UDL) file. I file UDL vengono archiviati in testo non crittografato e non possono essere crittografati.UDLs are stored in clear text and cannot be encrypted. Poiché per l'applicazione si tratta di una risorsa esterna basata su file, un file UDL non può essere protetto né crittografato tramite .NET Framework.A UDL file is an external file-based resource to your application, and it cannot be secured or encrypted using the .NET Framework.

Evitare attacchi injection con i compilatori di stringhe di connessioneAvoid Injection Attacks with Connection String Builders

Un attacco injection alle stringhe di connessione può verificarsi quando si usa la concatenazione dinamica di stringhe per compilare stringhe di connessione basate sull'input dell'utente.A connection string injection attack can occur when dynamic string concatenation is used to build connection strings based on user input. Se l'input dell'utente non viene convalidato e il testo o i caratteri dannosi non vengono convertiti in caratteri di escape, un utente non autorizzato potrebbe accedere a dati sensibili o ad altre risorse del server.If the user input is not validated and malicious text or characters not escaped, an attacker can potentially access sensitive data or other resources on the server. Per risolvere questo problema, in ADO.NET 2.0 sono state introdotte nuove classi di compilatori di stringhe di connessione per convalidare la sintassi delle stringhe e assicurarsi che non vengano inseriti parametri aggiuntivi.To address this problem, ADO.NET 2.0 introduced new connection string builder classes to validate connection string syntax and ensure that additional parameters are not introduced. Per ulteriori informazioni, vedere generatori di stringhe di connessione.For more information, see Connection String Builders.

Usare Persist Security Info=FalseUse Persist Security Info=False

Il valore predefinito per Persist Security Info è false; si consiglia di usare questo valore in tutte le stringhe di connessione.The default value for Persist Security Info is false; we recommend using this default in all connection strings. Se si imposta Persist Security Info su true o yes, è possibile che da una connessione aperta si ottengano informazioni sensibili, tra cui l'ID utente e la password.Setting Persist Security Info to true or yes allows security-sensitive information, including the user ID and password, to be obtained from a connection after it has been opened. Se si imposta Persist Security Info su false o no, le informazioni di sicurezza vengono eliminate dopo essere state usate per aprire la connessione. In questo modo un'origine non attendibile non ha accesso alle informazioni sensibili per la sicurezza.When Persist Security Info is set to false or no, security information is discarded after it is used to open the connection, ensuring that an untrusted source does not have access to security-sensitive information.

Crittografare i file di configurazioneEncrypt Configuration Files

È anche possibile archiviare le stringhe di connessione in file di configurazione, eliminando la necessità di incorporarle nel codice dell'applicazione.You can also store connection strings in configuration files, which eliminates the need to embed them in your application's code. I file di configurazione sono file XML standard per i quali in .NET Framework è stato definito un set comune di elementi.Configuration files are standard XML files for which the .NET Framework has defined a common set of elements. Stringhe di connessione nel file di configurazione vengono in genere archiviate all'interno di <connectionStrings > elemento il app. config per un'applicazione Windows, o Web. config file per un'applicazione ASP.NET.Connection strings in configuration files are typically stored inside the <connectionStrings> element in the app.config for a Windows application, or the web.config file for an ASP.NET application. Per ulteriori informazioni sui concetti fondamentali di archiviazione, il recupero e la crittografia di stringhe di connessione dai file di configurazione, vedere stringhe di connessione e i file di configurazione.For more information on the basics of storing, retrieving and encrypting connection strings from configuration files, see Connection Strings and Configuration Files.

Vedere ancheSee Also

Protezione delle applicazioni ADO.NETSecuring ADO.NET Applications
La crittografia delle informazioni di configurazione utilizzando la configurazione protettaEncrypting Configuration Information Using Protected Configuration
PAVE Security in Native and .NET Framework Code (PAVE: Sicurezza nel codice nativo e .NET Framework)PAVE Security in Native and .NET Framework Code
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center