Procedura: proteggere da attacchi tramite script in un'applicazione Web applicando alle stringhe la codifica HTML
Aggiornamento: novembre 2007
Nella maggior parte dei casi si verifica un attacco tramite script quando nell'applicazione viene inserito codice eseguibile (o script). Per impostazione predefinita, ASP.NET opera una convalida delle richieste e genera un errore nel caso in cui un form inviato contenga elementi HTML.
È possibile fronteggiare gli attacchi tramite script nei modi seguenti:
Eseguire la convalida dei parametri per le variabili del form, le variabili delle stringhe di query e i valori dei cookie. Questa convalida deve includere due tipi di verifica: la verifica della conversione delle variabili nel tipo previsto (ad esempio, la conversione in un numero intero, la conversione nella data e nell'ora e così via) e la verifica degli intervalli previsti o della formattazione. Ad esempio, se una variabile dell'invio del form è da considerarsi un numero intero, è necessario verificare tramite il metodo Int32.TryParse che la variabile sia effettivamente un numero intero. Inoltre il numero intero risultante va controllato per verificare che il valore rientri in un intervallo previsto.
Applicare la codifica HTML all'output della stringa quando si scrivono i valori nella risposta. In questo modo le stringhe fornite dall'utente verranno sottoposte a rendering come testo statico nei browser invece che come codice script eseguibile o elementi HTML interpretati.
Con la codifica HTML gli elementi HTML vengono sostituiti da caratteri HTML riservati in modo da essere visualizzati anziché eseguiti.
Per applicare la codifica HTML a una stringa
Prima di visualizzare le stringhe, chiamare il metodo HtmlEncode. Gli elementi HTML verranno convertiti in rappresentazioni di stringhe che il browser visualizzerà, anziché interpretare come HTML.
Nell'esempio che segue viene illustrata la codifica HTML. Nella prima istanza, viene codificato l'input utente prima della visualizzazione. Nella seconda istanza, vengono codificati dati provenienti da un database prima della visualizzazione.
Nota: Questo esempio funziona solo se si disattiva la convalida delle richieste nella pagina mediante l'aggiunta dell'attributo ValidateRequest="false" alla direttiva @ Page. Non si consiglia di disattivare la convalida delle richieste in un'applicazione di produzione. Di conseguenza assicurarsi di attivare di nuovo la convalida delle richieste dopo avere visualizzato questo esempio.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Button1.Click Label1.Text = Server.HtmlEncode(TextBox1.Text) Label2.Text = _ Server.HtmlEncode(dsCustomers.Customers(0).CompanyName) End Sub
private void Button1_Click(object sender, System.EventArgs e) { Label1.Text = Server.HtmlEncode(TextBox1.Text); Label2.Text = Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName); }
Vedere anche
Concetti
Cenni preliminari sugli attacchi tramite script
Cenni preliminari sui pericoli di protezione a cui sono esposte le applicazioni Web
Suggerimenti di base sulla protezione delle applicazioni Web