asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 12580
ASPCode.it - Store

  > > Tips

ValidateRequest e prevenzione di script-injection
di Paolo Capitani

Data di pubblicazione: 31/05/2004        Voto della community: 3,87 (Votanti: 10)

Una nuova feature, inserita nel framework .net con il rilascio della versione 1.1, Ŕ il blocco della ricezione da parte del server di form i cui input contengono codice HTML non "codificato"; questa limitazione Ŕ stata introdotta allo scopo di evitare attacchi di script-injection che, in script in cui non viene effettuato un controllo sull'input inserito dall'utente, possono avere effetti molto dannosi.
Nel caso in cui il form inviato contenga dei tag HTML, il server lancia un eccezione e, se tale eccezione non viene gestita, la pagina restituisce un messaggio di errore indicando che il form non pu˛ essere processato in quanto contiene codice potenzialmente dannoso.
In alcuni casi per˛ si pu˛ aver la necessitÓ di consentire l'introduzione di tag HTML nei campi di un form e quindi di disabilitare questa limitazione. Per fare ci˛ Ŕ necessario impostare la proprietÓ validateRequest=false nella direttiva Page o nella sezione <configuration> del file di configurazione (web.config) della propria applicazione.
Ecco un esempio della prima modalitÓ:

<%@ Page validateRequest="false" %>

// codice e layout della pagina ASP.net...

Nel secondo caso invece (tramite file web.config) avremo:

<configuration>
  <system.web>
    <pages validateRequest="false" />
  </system.web>
</configuration>

NB: Se si opta per (o se si ha la necessitÓ di) disabilitare questa limitazione nativa di ASP.net 1.1, si consiglia caldamente di controllare il contenuto dei form dei quali viene fatto il submit onde evitare che utenti (malintenzionati o meno) possano causare comportamenti indesiderati alle proprie applicazioni web.

Un sicuro e semplice controllo Ŕ senza dubbio l'applicazione dell'encoding sul contenuto inviato (per esempio tramite un TextBox). Vediamo un esempio:

<%@ Page Language="C#" validateRequest="false" %>

<script runat="server">
public void Btn1_Click(object sender, EventArgs e){
  Label1.Text = Server.HtmlEncode(TextBox1.Text);
}
</script>

<form runat="server">
  <asp:textbox id="TextBox1" runat="server" />
  <asp:button id="Btn1" onclick="Btn1_Click" text="INVIA" runat="server" />
<br />
  Hai inserito: <asp:label id="Label1" runat="server" />
</form>




Utenti connessi: 12580