Protezione dello stato sessione

Aggiornamento: novembre 2007

La funzionalità relativa allo stato sessione di ASP.NET consente di archiviare e recuperare i valori per un utente mentre questi si sposta tra le pagine ASP.NET che costituiscono un'applicazione Web. Questa funzionalità identifica come singola sessione le richieste provenienti dallo stesso browser durante un intervallo di tempo limitato e può mantenere i valori delle variabili per l'intera durata della sessione. Le sessioni del browser sono identificate in un cookie di sessione oppure nell'URL, quando lo stato sessione è configurato come "senza cookie".

Lo stato sessione di ASP.NET è attivato per impostazione predefinita per tutte le applicazioni ASP.NET ed è configurato per l'utilizzo di cookie di sessione per identificare le sessioni del browser.

Per impostazione predefinita, lo stato sessione di ASP.NET mantiene in memoria i valori delle variabili della sessione, ma può essere configurato in modo da archiviare tali valori in un server di stato, un server SQL o un archivio dello stato sessione personalizzato.

L'adozione delle procedure ottimali per la codifica e la configurazione può migliorare la sicurezza dell'applicazione, ma è altrettanto importante mantenere il server applicazioni costantemente aggiornato in base alle ultime patch di sicurezza per Microsoft Windows e Internet Information Services (IIS) e a tutte le patch per Microsoft SQL Server, Active Directory e altre origini dati relative all'applicazione.

Per informazioni più dettagliate sulle procedure ottimali per la scrittura di codice e la protezione delle applicazioni, vedere il libro Writing Secure Code di Michael Howard e David LeBlanc, nonché la guida fornita da Microsoft Patterns and Practices all'indirizzo https://www.microsoft.com/resources/practices/default.mspx (informazioni in lingua inglese).

Configurazione protetta dello stato sessione

La funzionalità relativa allo stato sessione è attivata per impostazione predefinita. Le opzioni di configurazione sono impostate su valori predefiniti che garantiscono la massima protezione, ma si consiglia di disattivare lo stato sessione se questo non è necessario per l'applicazione. Per informazioni sulle impostazioni di configurazione dello stato sessione e sui relativi valori predefiniti, vedere Elemento sessionState (schema delle impostazioni ASP.NET).

Protezione dei valori di configurazione

Quando vengono archiviate informazioni riservate in un file di configurazione relativo a un'applicazione, i valori riservati devono essere crittografati utilizzando la configurazione protetta. Tra le informazioni particolarmente riservate sono incluse le chiavi di crittografia nell'elemento di configurazione machineKey e le stringhe di connessione all'origine dati nell'elemento di configurazione connectionStrings. Per ulteriori informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.

Protezione delle connessioni a un'origine dati dello stato sessione

Stringhe di connessione

Come già accennato, è importante proteggere le informazioni riservate incluse in una stringa di connessione in un computer che esegue SQL Server, il servizio dello stato sessione o un'altra origine dati. Per mantenere protetta la connessione al server dati, si consiglia di crittografare le informazioni relative alla stringa di connessione incluse nella configurazione utilizzando la configurazione protetta. Per ulteriori informazioni, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.

Connessione a SQL Server con la sicurezza integrata

Si consiglia di eseguire la connessione a computer che eseguono SQL Server utilizzando la sicurezza integrata per evitare che la stringa di connessione venga danneggiata e che l'ID utente e la password risultino visibili. Quando si specifica una connessione che utilizza la sicurezza integrata per connettersi a un computer che esegue SQL Server, lo stato sessione viene reimpostato sull'identità del processo. Si consiglia di verificare che l'identità del processo che esegue ASP.NET, ad esempio il pool di applicazioni, sia l'account predefinito del processo o un account utente con diritti limitati. Per ulteriori informazioni, vedere Rappresentazione ASP.NET e Modalità stato sessione.

Protezione dell'ID di sessione

Quando si definisce la protezione dell'applicazione e dei dati, è importante impedire che l'ID di sessione risulti visibile a un'origine indesiderata sulla rete e che venga utilizzato in un attacco di tipo replay nei confronti dell'applicazione. Di seguito sono riportati alcuni suggerimenti per migliorare la sicurezza dell'ID di sessione.

  • Proteggere l'applicazione con SSL (Secure Sockets Layer).

  • Specificare un valore più basso per la proprietà Timeout della sessione. Valutare l'opportunità di forzare un reindirizzamento sul client che abbia la stessa durata del timeout di sessione utilizzando uno script client oppure di aggiungere un'intestazione di aggiornamento utilizzando il metodo AddHeader, come illustrato nel seguente esempio.

    Response.AddHeader("Refresh", Session.Timeout & ";URL=Logoff.htm"
    Response.AddHeader("Refresh", Session.Timeout + ";URL=Logoff.htm";
    
  • Evitare di utilizzare sessioni senza cookie. Se si specificano sessioni di questo tipo, avvertire gli utenti di non inviare messaggi di posta elettronica, utilizzare segnalibri o salvare collegamenti contenenti un ID di sessione.

  • Evitare di specificare le modalità AutoDetect e UseDeviceProfile basate su cookie.

  • Consentire agli utenti di disconnettersi e, al momento della disconnessione, chiamare il metodo HttpSessionState.Abandon. Avvertire gli utenti di chiudere il browser dopo la disconnessione.

  • Quando si utilizzano sessioni senza cookie, configurare regenerateExpiredSessionID come true per avviare sempre una nuova sessione quando viene fornito un ID di sessione scaduto.

Protezione delle pagine Web che utilizzano lo stato sessione

Le pagine dell'applicazione che gestiscono dati riservati devono essere protette utilizzando meccanismi di sicurezza Web standard, ad esempio SSL (Secure Sockets Layers), e richiedendo agli utenti di connettersi per effettuare operazioni su dati riservati, quali l'aggiornamento delle informazioni personali o l'eliminazione di account.

Inoltre, le pagine non devono esporre in testo non crittografato i dati riservati, ad esempio le password e, in alcuni casi, i nomi utente. Assicurarsi che le pagine che visualizzano tali informazioni utilizzino la protezione SSL e siano disponibili solo per gli utenti autenticati.

Messaggi di errore ed eventi

Eccezioni

Per impedire che le informazioni riservate risultino visibili a origini indesiderate, configurare l'applicazione in modo che i messaggi di errore dettagliati non vengano visualizzati o che vengano visualizzati solo quando il client è il server Web stesso. Per ulteriori informazioni, vedere Elemento customErrors (schema delle impostazioni ASP.NET).

Log eventi

Se il server esegue Windows Server 2003, è possibile migliorare la sicurezza dell'applicazione impostando la protezione del log eventi e definendo i parametri relativi alla dimensione, al mantenimento e ad altre proprietà del log per impedire un attacco di tipo Denial of Service.

Provider dell'archivio dello stato sessione personalizzati

Quando si crea un provider dell'archivio dello stato sessione personalizzato, assicurarsi di seguire le procedure di sicurezza ottimali per evitare attacchi, ad esempio attacchi di tipo SQL injection, durante l'utilizzo di un database. Quando si utilizza un provider dell'archivio dello stato sessione personalizzato, verificare che per tale provider siano state implementate le procedure ottimali di sicurezza.

Vedere anche

Concetti

Cenni preliminare sullo stato della sessione ASP.NET

Altre risorse

Sicurezza dei siti Web ASP.NET