Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Area Aziende Cocktail Registrazione domini



Gestione dell'XSS - Cross-site scripting - in ASP

Home + Articoli + Sicurezza + Articolo # 149
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Il Cross-site scripting (o XSS) è un tipo di attacco (cui sono vulnerabili diversi siti web dinamici) che ha lo scopo di diffondere pericoli di vario genere sfruttando la visbilità di un sito lecito (vittima dell'attacco).

Gli attacchi XSS sfruttano, infatti, le possibilità di input della pagina (querystring, post, cookie,...) per "inniettare" codice pericoloso (generalmente Javascript) all'interno di un dato sito al fine di colpirne l'utenza.

Gli utenti del sito attaccato vengono, infatti, colpiti di rimbalzo a causa delle vulnerabilità dei browser che consentono l'esecuzione di script lato client talvolta molto pericolosi.

Tengo a precisare che ho parlato di vulnerabilità, non di bug, ragion per cui è possibile gestire questo aspetto con un semplice script di controllo lato server in fase di progettazione di un'applicazione Web.

Vediamo in pratica di cosa si tratta.

XSS sfrutta le querystring della pagina; capita spesso di avere pagine con URL del tipo:
pagina.asp?parametro=XYZ
oppure:
pagina.asp?parametro=123
quindi variabili di tipo stringa, numerico, alfanumerico o anche con caratteri speciali.

XSS può fare uno scherzo del genere se i valori delle variabili di tipo querystring non vengono gestite:
pagina.asp?parametro=<script>alert('Ciao da XSS!')</script>
In sostanza, oltre ad un'eventuale serie di errori di esecuzione della pagina, il risultato sarà un alert col messaggio specificato al suo interno... definire questa cosa come "inacettabile" è come farle un complimento!

Attraverso Javascript o VBScript, quindi attraverso uno script lato client, è possibile sfruttare bug del sistema e provocare danni al sistema stesso ed agli utenti della pagina che viene malevolmente sfruttata per generare un XSS ed in sede legale il responsabile del sito è responsabile anche dei danni provocati, anche se non è stato materialmente lui a provocarne... ammesso ovviamente che non riesca a dimostrare il contrario.

La soluzione è semplice, ovvero filtrare il codice HTML per renderlo non eseguibile ma stampabile a video. ASP dispone infatti del metodo HTMLEncode dell'oggetto Server, ragion per cui si può impostare un filtro base, in fase di recupero della querystring, come il seguente:
<%
    Dim parametro
    parametro = Server.HTMLEncode(Request.QueryString("parametro"))
%>
ma la soluzione non è elegante e nemmeno pratica, ma soprattutto non gestisce altri aspetti legati al funzionamento degli script della pagina, dato che non viene gestito il tipo di dato che potrebbe essere uno di quelli descritti in precedenza.

Creiamo quindi una funzione predefinita, da includere in un file di configurazione dell'applicazione Web in oggetto, che possiamo chiamare XSS_Filter().

Vediamo il codice:
<%
    Function XSS_Filter(MyQueryString)
        If IsNumeric(MyQueryString) Then
            MyQueryString = CInt(MyQueryString)
        Else
            MyQueryString = Server.HTMLEncode(MyQueryString)
        End If
        XSS_Filter = MyQueryString
    End Function
%>
Il funzionamento è semplice: verifichiamo che la querystring sia numerica e la convertiamo in numerica intera; in caso contrario effettuiamo la trasformazione del codice HTML.

Il funzionamento di questa funzione non si sposta di una virgola da quello dell'esempio grezzo impostato in precedenza, ma la filosofia è più corretta.

A questo punto recuperiamo la querystring:
<%
    Dim parametro
    parametro = XSS_Filter(Request.QueryString("parametro"))
%>
e proviamo a stamparla a video:
<%
    Response.Write parametro
%>
oppure ad utilizzarla in qualsiasi altro modo necessiti alla nostra applicazione Web... senza pericoli!

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones