Condividi tramite


Protezione dei controlli di accesso

Aggiornamento: novembre 2007

I controlli di accesso ASP.NET consentono di offrire una soluzione per il controllo dell'accesso alle pagine Web basato sull'autenticazione degli utenti, l'appartenenza e i ruoli. I controlli di accesso includono i controlli CreateUserWizard, Login, LoginStatus, LoginView, PasswordRecovery e ChangePassword. Le informazioni presenti in questo argomento descrivono come migliorare la protezione dei controlli di accesso mediante le procedure di configurazione e di codifica più idonee.

Sebbene l'osservazione delle procedure consigliate per la codifica e la configurazione possa migliorare la protezione dell'applicazione, è importante anche installare nel server Web le patch di protezione più recenti per Microsoft Windows e IIS (Internet Information Services), nonché tutte le patch di protezione disponibili per Microsoft SQL Server o per altre origini dati.

Per informazioni più dettagliate sulle procedure più idonee per la scrittura di codice protetto e per la protezione delle applicazioni, consultare il libro "Writing Secure Code" di Michael Howard e David LeBlanc e le informazioni disponibili nel sito Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx, informazioni in lingua inglese).

Negli argomenti riportati di seguito sono disponibili anche informazioni su particolari procedure di protezione per altri tipi di controllo:

Suggerimenti generali di protezione per i controlli di accesso

La protezione dei controlli di accesso include l'uso di procedure ottimali in numerose aree, brevemente descritte di seguito con collegamenti che forniscono ulteriori informazioni.

Utilizzo del protocollo SSL (Secure Sockets Layer)

I controlli di accesso ASP.NET trasmettono le informazioni al server in testo normale su HTTP. Quando si utilizzano informazioni riservate, è consigliabile servirsi del protocollo HTTPS con la crittografia SSL (Secure Sockets Layer). SSL impedisce che i dati vengano modificati (integrità dei dati), protegge l'identità degli utenti (riservatezza) e assicura che i dati provengano dal client previsto (autenticazione). Per ulteriori informazioni, vedere Cenni preliminari sulla crittografia e Configuring SSL on a Web Server or a Web Site nella documentazione relativa a IIS (informazioni in lingua inglese).

Convalida dell'input dell'utente

Non dare mai per scontato che l'input ricevuto da un utente sia sicuro. Gli utenti malintenzionati possono inviare informazioni potenzialmente pericolose dal client all'applicazione. Per i controlli di accesso è particolarmente importante gestire con cautela l'input dell'utente in quanto le informazioni immesse sono spesso di natura riservata. Per ulteriori informazioni su come impedire immissioni di utenti malintenzionati, vedere Suggerimenti di base sulla protezione delle applicazioni Web.

Laddove possibile, utilizzare i controlli di convalida per verificare la validità di nomi utente e di password complesse. È possibile convalidare alcuni input dell'utente senza i controlli di convalida. Il controllo CreateUserWizard, ad esempio, supporta la convalida obbligatoria e di confronto. È possibile anche specificare un'espressione regolare con la proprietà EmailRegularExpression per convalidare che gli indirizzi di posta elettronica corrispondano a un modello specificato e con la proprietà PasswordRegularExpression per convalidare che le password soddisfino i requisiti.

Per ottenere la massima flessibilità nella convalida dell'input dell'utente nei controlli di accesso, utilizzare i modelli. Quando possibile, creare un modello per il controllo, aggiungere singoli controlli, in genere controlli TextBox, e aggiungere i controlli di convalida per limitare il più possibile l'input dell'utente.

Nota:

Quando si utilizzano i controlli di convalida, eseguire sempre la convalida nel codice server oltre a utilizzare la convalida sul lato client. In questo modo è possibile evitare che gli utenti ignorino la convalida disattivando o modificando il controllo dello script client.

Per ulteriori informazioni, vedere Convalida dell'input utente nelle pagine Web ASP.NET.

Protezione dello stato di visualizzazione

Nei controlli di accesso vengono memorizzate informazioni sullo stato di visualizzazione della pagina, pertanto è consigliabile proteggere lo stato di visualizzazione. Sebbene i dati nello stato di visualizzazione vengano memorizzati in un formato codificato, è possibile visualizzarli e alterarli. Per ulteriori informazioni, vedere Cenni preliminari sullo stato di visualizzazione ASP.NET.

Protezione dell'appartenenza

Il sistema delle appartenenze ASP.NET fornisce funzionalità di convalida e memorizzazione delle credenziali utente. I controlli CreateUserWizard, Login, PasswordRecovery e ChangePassword utilizzano le appartenenze di ASP.NET per attivare la creazione di un sistema di autenticazione completo che richieda una scrittura minima o nessuna scrittura di codice. I controlli LoginName, LoginStatus e LoginView, inoltre, possono essere utilizzati per completare la soluzione di gestione delle appartenenze degli utenti e il controllo dell'accesso alle pagine nel sito Web. Per ulteriori informazioni, vedere Introduzione all'appartenenza e Protezione dell'appartenenza.

I provider di appartenenze forniti con ASP.NET includono una soglia incorporata per il numero massimo di tentativi di password non valida o di risposte relative alla password, come specificato nella proprietà MaxInvalidPasswordAttempts. Le appartenenze di ASP.NET consentono inoltre di configurare il numero di minuti in cui è consentito un numero massimo di tentativi di password non valida o di risposte relative alla password prima che l'utente dell'appartenenza venga bloccato, come viene specificato nella proprietà PasswordAttemptWindow. La soglia predefinita di tentativi di risposta relativa alla password è cinque, mentre la finestra temporale predefinita è di dieci minuti. È possibile sottoporre a override le soglie nei provider predefiniti con le soglie impostate nella sezione membership del file Web.config dell'applicazione. Se si impostano le soglie, è consigliabile utilizzare i valori più bassi possibili. È inoltre consigliabile non impostare la proprietà RequiresQuestionAndAnswer su false, perché i tentativi di risposta per la password non validi non vengono registrati. Per ulteriori informazioni, vedere Provider di appartenenze.

Protezione della posta elettronica

I controlli CreateUserWizard, ChangePassword e PasswordRecovery possono inviare messaggi di posta elettronica con i dettagli sulla transazione utente completata. Assicurarsi che tutti i messaggi di posta elettronica inviati agli utenti rivelino solo le informazioni necessarie. Ad esempio, evitare di semplificare l'utilizzo del filtro della riga relativa all'oggetto dei messaggi di posta elettronica da parte di terzi indesiderati. È consigliabile non inviare le password nei messaggi di posta elettronica. Prendere in considerazione altri metodi di verifica delle transazioni relative a password, ad esempio l'invio di un codice di conferma e di un URL che deve essere utilizzato dagli utenti per il completamento della transazione.

Se la proprietà MailDefinition dei controlli CreateUserWizard, ChangePassword e PasswordRecovery non è specificata, non viene inviato alcun messaggio di posta elettronica. Quando questi controlli vengono configurati per l'invio dei messaggi di posta elettronica, è consigliabile gestire l'evento di errore della posta in modo da intercettare eventuali errori relativi a SMTP per evitare di rivelare agli utenti informazioni non necessarie. Per il controllo ChangePassword, gestire SendMailError e impostare la proprietà Handled dell'oggetto SendMailErrorEventArgs su true. Per un esempio in cui viene illustrato come gestire un evento di errore della posta, vedere l'evento SendMailError. Per ulteriori informazioni sull'installazione del servizio SMPT (Simple Mail Transfer Protocol), vedere Procedura: installare e configurare server virtuali SMTP in IIS 6.0.

Considerazioni sulla protezione di singoli controlli

Nelle sezioni che seguono vengono illustrate considerazioni sulla protezione relative a singoli controlli di accesso.

Controllo CreateUserWizard

Il controllo CreateUserWizard raccoglie informazioni da un utente, quindi crea un account per l'utente nel sistema di appartenenze di ASP.NET. È possibile estendere il controllo CreateUserWizard perché accetti ulteriori informazioni con l'aggiunta di campi o di passaggi prima o dopo i passaggi CreateUserWizardStep e CompleteWizardStep. Se un utente non completa tutti i passaggi di un controllo CreateUserWizard, ma viene creato un account, potrebbe verificarsi un problema di protezione. Per impedire che gli utenti ignorino passaggi della procedura guidata personalizzata, eseguire l'override del metodo OnNextButtonClick ed eseguire l'autenticazione personalizzata. Una volta raccolte le informazioni, utilizzare il metodo CreateUser della classe MembershipProvider per creare l'utente.

Se si utilizza l'oggetto CreateUserWizard per creare automaticamente gli account utente mentre si eseguono attività amministrative, è consigliabile impostare la proprietà AutoGeneratePassword su true e la proprietà LoginCreatedUser su false. In questo particolare scenario, è consigliabile impostare la proprietà DisableCreatedUser su false.

Controllo Login

Login è un controllo composito che incorpora le caselle di testo relative a nome utente e password, nonché una casella di controllo che indica se gli utenti desiderano essere riconosciuti alla successiva visita alla pagina. Le proprietà RememberMeSet e DisplayRememberMe consentono rispettivamente di inviare un cookie di autenticazione al browser dell'utente e di visualizzare una casella di controllo che permette all'utente di controllare l'invio di un cookie persistente. Evitare di impostare RememberMeSet su true e DisplayRememberMe su false, in quantoviene inviato un cookie a insaputa dell'utente. In generale, la memorizzazione dei cookie nei computer degli utenti comporta questi rischi. I cookie rappresentano un'altra forma di input dell'utente e sono pertanto soggetti alla diffusione e allo spoofing delle informazioni. Per ulteriori informazioni vedere Cenni preliminari sui cookie ASP.NET.

Se il controllo Login viene utilizzato con diverse tipologie di utenti finali, valutare l'opportunità di codificare il controllo in modo che gli utenti dei computer pubblici abbiano la possibilità di utilizzare cookie non persistenti, eliminati al termine della sessione. Per ulteriori informazioni sulla scrittura di cookie, vedere Procedura: scrivere un cookie.

Controllo LoginName

Il controllo LoginName visualizza il nome di accesso dell'utente o il nome dell'account e del dominio dell'utente se l'applicazione utilizza l'autenticazione di Windows. Valutare l'opportunità di aggiungere una casella di controllo che consenta agli utenti di specificare se vengono visualizzate informazioni sull'account o il nome. Ad esempio, gli utenti dei computer pubblici potrebbero non voler visualizzare le informazioni riservate.

Controllo LoginView

Mediante il controllo LoginView è possibile mostrare informazioni diverse agli utenti connessi e a quelli non connessi (utenti anonimi). Esaminare il contenuto visualizzato con i modelli AnonymousTemplateLoggedInTemplate e qualsiasi contenuto associato alla proprietà RoleGroups per far sì che gli utenti non siano in grado di visualizzare modelli non destinati a loro. In particolare, la ricerca nell'insieme nella proprietà RoleGroups viene eseguita in base all'ordine nel quale sono definiti i modelli. L'utente visualizza il primo modello del gruppo di ruoli corrispondente. Se un utente è membro di più ruoli, verrà visualizzato il primo modello del gruppo di ruoli che corrisponde a uno dei ruoli dell'utente. Se a un singolo ruolo sono associati più modelli, verrà utilizzato solo il primo modello definito. Per ulteriori informazioni vedere Informazioni sulla gestione dei ruoli.

Controllo PasswordRecovery

Mediante il controllo PasswordRecovery gli utenti possono recuperare la propria password in base agli indirizzi di posta elettronica associati al proprio nome utente. Durante la configurazione del controllo PasswordRecovery, seguire le linee guida seguenti:

  • Gestire l'evento SendMailError per intraprendere qualche azione se l'errore si verifica durante l'invio del messaggio di posta elettronica.

  • Impostare un numero limitato di tentativi della risposta relativa alle password con la proprietà MaxInvalidPasswordAttempts e una finestra temporale limitata con la proprietà PasswordAttemptWindow.

  • Esaminare tutte le informazioni inviate alla posta degli utenti e la protezione del canale utilizzato per la trasmissione dei messaggi, soprattutto se il messaggio di posta elettronica relativo al recupero della password contiene password degli utenti. Evitare di inviare messaggi di posta elettronica in cui è chiaramente indicata la presenza di informazioni riservate, ad esempio i messaggi in cui la riga dell'oggetto include la parola 'password'.

Controllo ChangePassword

Mediante il controllo ChangePassword gli utenti possono modificare la propria password. Durante la configurazione del controllo ChangePassword, seguire le linee guida seguenti:

  • Gestire l'evento SendMailError per intraprendere qualche azione se l'errore si verifica durante l'invio della posta elettronica.

  • Impostare un numero limitato di tentativi della risposta relativa alle password con la proprietà MaxInvalidPasswordAttempts e una finestra temporale limitata con la proprietà PasswordAttemptWindow.

  • Esaminare tutte le informazioni inviate alla posta elettronica degli utenti e la protezione del canale utilizzato per la trasmissione dei messaggi, soprattutto quando il controllo ChangePassword è configurato per l'utilizzo della posta per l'invio della nuova password all'utente.

  • Utilizzare la crittografia SSL per assicurarsi che non sia possibile leggere la nuova password dell'utente durante il postback.

  • Limitare l'accesso al file utilizzato dal controllo ChangePassword come corpo dei messaggi di posta elettronica inviati all'utente. Questo file è definito dalla proprietà BodyFileName della classe MailDefinition.

Vedere anche

Attività

Procedura: installare e configurare server virtuali SMTP in IIS 6.0

Concetti

Suggerimenti di base sulla protezione delle applicazioni Web

Protezione dei controlli standard

Protezione dell'appartenenza

Altre risorse

Gestione di utenti tramite l'appartenenza

Sicurezza dei siti Web ASP.NET

Sintassi per il controllo server di convalida

Servizi di crittografia