Procedura: proteggere le stringhe di connessione durante l'utilizzo dei controlli origine dati

Aggiornamento: novembre 2007

Quando si utilizzano i controlli origine dati, è necessario memorizzare le stringhe di connessione in una posizione centralizzata, ovvero il file Web.config dell'applicazione. Il vantaggio è doppio: i controlli origine dati possono fare riferimento al nome della stringa di connessione dal file di configurazione invece di includere la stringa di connessione come proprietà di controllo; inoltre, l'amministrazione del sito è più semplice poiché la gestione delle stringhe di connessione è centralizzata e, quindi, non è necessario rivedere le singole pagine in caso di modifica delle informazioni sulla stringa di connessione.

In questo argomento verrà illustrato come inserire le stringhe di connessione nel file Web.config tramite Visual Studio e il controllo origine dati, come utilizzare l'utilità della riga di comando, Aspnet_regiis.exe, in modo da crittografare queste stringhe di connessione per un ulteriore livello di protezione.

Come aggiungere una stringa di connessione a Web.config con un controllo origine dati

  1. Aprire una pagina ASPX in visualizzazione Progettazione di Visual Studio.

  2. Dalla cartella Dati della Casella degli strumenti, trascinare un controllo origine dati, ad esempio un controllo SqlDataSource, nell' area di progettazione.

  3. Fare clic con il pulsante destro del mouse sul controllo e scegliere Mostra smart tag.

  4. Nel pannello smart tag fare clic su Configura origine dati.

  5. Nel pannelloScegli connessione dati fare clic su Nuova connessione.

  6. Selezionare un'origine dati appropriata dall'elenco della finestra di dialogo Scegli origine dati , quindi scegliere OK.

  7. Indicare il nome del server, il nome utente e la password corretti nella finestra di dialogo Aggiungi connessione , quindi scegliere OK.

    Viene visualizzata nuovamente la finestra di dialogo Configura origine dati con un riepilogo dei dettagli relativi alla connessione.

  8. Scegliere Avanti, quindi per salvare la stringa di connessione nel file Web.config.

    La stringa di connessione viene memorizzata nel file Web.config. ed è possibile configurare i dettagli sulle query per il controllo.

Per crittografare le informazioni sulla stringa di connessione memorizzate nel file Web.config

  1. Dalla riga di comando di Windows eseguire lo strumento di ASP.NET per la registrazione di IIS (Aspnet_regiis.exe) con le seguenti opzioni:

    • L'opzione -pe, passando la stringa "connectionStrings" per crittografare l'elemento connectionStrings.

    • L'opzione -app, passando il nome dell'applicazione.

    Lo strumento Aspnet_regiis.exe si trova nella cartella %systemroot%\Microsoft.NET\Framework\versionNumber.

    Nell'esempio di codice riportato di seguito viene illustrato come crittografare la sezione connectionStrings del file Web.config per un'applicazione denominata SampleApplication.

    aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
    

    Dopo aver completato il comando, è possibile visualizzare il contenuto del file Web.config. La sezione di configurazione connectionStrings conterrà informazioni crittografate al posto di una stringa di connessione non crittografata, come illustrato nell'esempio di codice riportato di seguito:

    <configuration>
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
             <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                      <KeyName>RSA Key
                      </KeyName>
                   </KeyInfo>
                   <CipherData>
                      <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    

    Lasciare il prompt dei comandi aperto per i passaggi successivi.

  2. Determinare l'identità o l'account utente con cui viene eseguito ASP.NET recuperando il nome WindowsIdentity corrente.

    Nell'esempio di codice riportato di seguito viene illustrato un sistema per determinare il nome di WindowsIdentity.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
    Nota:

    Per impostazione predefinita, quando in Windows Server 2003 la rappresentazione relativa a un'applicazione ASP.NET è disattivata nel file Web.config, l'identità con cui viene eseguita l'applicazione è l'account NETWORK SERVICE. In altre versioni di Windows ASP.NET viene eseguito utilizzando l'account ASPNET locale.

    L'identità o l'account utente con cui viene eseguito ASP.NET deve disporre dell'accesso in lettura alla chiave di crittografia utilizzata per crittografare e decrittografare le sezioni del file Web.config. In questa procedura si presuppone che il sito Web sia configurato con l'oggetto RsaProtectedConfigurationProvider predefinito specificato nel file Machine.config denominato "RsaProtectedConfigurationProvider". Il contenitore di chiavi RSA utilizzato dall'oggetto RsaProtectedConfigurationProvider predefinito è denominato "NetFrameworkConfigurationKey".

  3. Dal prompt dei comandi eseguire lo strumento Aspnet_regiis.exe con le seguenti opzioni:

    • L'opzione -pa, passando il nome del contenitore di chiavi RSA per l'oggetto RsaProtectedConfigurationProvider predefinito.

    • L'identità dell'applicazione ASP.NET, come determinata nel passaggio precedente.

    Nell'esempio di codice riportato di seguito viene illustrato come concedere all'account NETWORK SERVICE l'accesso al contenitore di chiavi "NetFrameworkConfigurationKey" RSA a livello di computer.

    aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
    
  4. Per decrittografare il contenuto del file Web.config crittografato, eseguire lo strumento aspnet_regiis.exe specificando l'opzione -pd. La sintassi è identica a quella utilizzata per la crittografia del contenuto del file Web.config con l'opzione -pe, ad eccezione del fatto che non viene specificato un provider di configurazione protetta. Il provider appropriato viene identificato nell'attributo configProtectionProvider relativo alla sezione protetta.

    Nell'esempio di codice riportato di seguito viene illustrato come decrittografare l'elemento connectionStrings dell'applicazione ASP.NET SampleApplication.

    aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
    

Vedere anche

Altre risorse

Crittografia delle informazioni di configurazione utilizzando la configurazione protetta