Quando vengono presentati i Web Controls nel Self-Paced Training Kit dell'esame 70-528, si parla dei rischi del Cross Site Scripting. Per fare una prova, ho inserito in una TextBox il seguente contenuto:
<script>altert("Ciao");</script>
Effettuando il post della pagina (attraverso la pressione di un pulsante), ho ottenuto il seguente messaggio di errore di ASP .NET:
A potentially dangerous Request.Form value was detected from the client (TextBox1="<script>altert("Ciao...").
Description: Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted. This value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. You can disable request validation by setting validateRequest=false in the Page directive or in the configuration section. However, it is strongly recommended that your application explicitly check all inputs in this case.
Il messaggio informa che, per evitare questo errore, dopo aver disabilitato il controllo di sicurezza è necessario eseguire manualmente la validazione dell'input. Per fortuna, questo compito è molto semplice da realizzare: basta utilizzare il metodo Server.HtmlEncode per trasformare l'input in un formato "sicuro" per la visualizzazione sulla pagina. Ad esempio:
Label1.Text = Server.HtmlEncode(TextBox1.Text);
In questo modo, il testo inserito nella TextBox viene codificato in HTML come:
<script>altert("Ciao");</script>
e dunque non risulta eseguibile.