Come codice ASP di revisione per la vulnerabilitÓ CSSI

Traduzione articoli Traduzione articoli
Identificativo articolo: 253119 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

In questo articolo viene descritto come identificare e corrette le applicazioni ASP (Active Server Pages) che sono soggetti a CSSI (Cross-Site Scripting Security problemi). Soltanto l'input non correttamente convalidato o formattato rende l'applicazione vulnerabile agli attacchi.

Informazioni

La procedura riportata di seguito riportata consente di identificare e correggere applicazioni ASP sono soggetti a CSSI:
  1. Cercare il codice ASP che genera codice HTML da visualizzare. ASP scrive HTML all'output in due modi:
    Response.Write
    					
    - e -
    <% =
    					
  2. Consente di determinare se l'output HTML include i parametri di input. Questi parametri possono provenire da un'ampia gamma di origini. Nell'elenco seguente sono origini di input comuni:

    Riduci questa tabellaEspandi questa tabella
    Origine di inputEsempio del metodo di accesso di codice ASP
    Insieme Request.Form
    Response.Write Request.Form("username")
    									
    Insieme Request.QueryString
    <%=Request.QueryString("username")%>
    									
    Response.Write Request.QueryString("username")
    									
    <a href="http://mysite/showuser.asp?username=<% = 
    Request.QueryString("username") %>">mypage</a>
    									
    <a href="http://mysite/mypage.asp"><%=Request.QueryString("url")%></a>
    									
    Oggetto di richiesta
    Response.Write("username")
    									
    Database / metodi di accesso dati
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Insieme di cookie
    Response.Write Request.Cookie("username")
    									
    Sessione e variabili di applicazione
    Response.Write Session("username")
    									
  3. Quando si trova codice ASP che genera codice HTML utilizzando alcuni input, Ŕ necessario valutare le soluzioni per l'applicazione specifica. Soluzioni di presentano alcuni concetti generali che consentono di iniziare la prevenzione di CSSI.

    Si noti che, quando il filtro o codifica, Ŕ necessario specificare un set per le pagine Web garantire che il filtro controlla i caratteri speciali appropriati di caratteri. Sequenze di byte che sono considerate speciali basati sul set di caratteri specifici (charset) necessario filtrare i dati inseriti in pagine Web. Un set di caratteri comuni Ŕ ISO 8859-1, l'impostazione predefinita nelle prime versioni di HTML e HTTP. ╚ necessario tenere conto problemi di localizzazione quando si modificano questi parametri.
    • Utilizzare il metodo HTMLEncode per codificare i parametri di input, durante la generazione di visualizzazione.

      In generale, la maggior parte degli attacchi CSSI possono essere evitati semplicemente utilizzando HTMLEncode parametri di input. Mediante la sostituzione di caratteri che hanno un significato particolare nelle variabili HTML a HTML che rappresentano i caratteri; HTMLEncode funziona (ad esempio & = & "="). Fare clic si noti che solo i dati devono essere codificati e non le stringhe di complete.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER utilizzabile per limitare il dominio da cui Ŕ possibile inviare le richieste.

      HTTP_REFERER restituisce una stringa che contiene l'URL della richiesta originale quando si Ŕ verificato un reindirizzamento. Quando si riceve un modulo compilato e rifiutarla se non provengono dal posto giusto, Ŕ possono che i server Web verificare il campo provenienza. ╚ possibile controllare il HTTP_REFERER nel modo seguente:
         <%
         If (Request.ServerVariables("HTTP_REFERER") = "") Or _
            (Left(Request.ServerVariables("HTTP_REFERER"),42) <> _
            "http://www.myserver.com/AppDir/mainfrm.asp") Then
            Response.Redirect "http://www.myserver.com/AppDir/mainfrm.asp"
         End If
         %> 
      							
      Nota : il campo di riferimento presenta alcune limitazioni:
      • Si rischia di invii di form legittimo di blocco.
      • Il collegamento potrebbe provenire da un posta elettronica o il segnalibro che non dispone di un URL.
      • Browser potrebbero deliberatamente deselezionare il campo di riferimento, ad esempio durante una richiesta HTTPS.
    • Utilizzare URLEncode per codificare URL ricevuti come parametri di input.

      Il metodo URLEncode applica le regole, inclusi i caratteri escape, alla stringa specificata di codifica degli URL. ╚ necessario codificare degli URL in ingresso prima di visualizzarli. Qui Ŕ riportato un esempio per URLEncode :
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Rimuovere o modificare caratteri speciali da parametri di input. Caratteri speciali sono i seguenti:
      < > " ' % ; ) ( & +
      							
      Ŕ possibile rimuovere o modificare i caratteri quando si leggono in oppure quando Ŕ visualizzarli nel browser a seconda dell'applicazione.

      Questo esempio si utilizza JavaScript per filtrare i caratteri speciali:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      questo esempio si utilizza espressioni regolari di VBScript versione 5.0 per filtrare i caratteri speciali:
      Function ValidateTags(QueryString)
      	Dim o
      	Set o = CreateObject("VBScript.RegExp") ' -> VB Script 5.0
      
      	Dim sBad
      
      	sBad = "(<\s*(script|object|applet|embed|form)\s*>)"   ' <  script xxx >
      	sbad = sbad & "|" & "(<.*>)"
                   ' >xxxxx<  warning includes hyperlinks and stuff between > and <
      	sbad = sbad & "|" & "(&.{1,5};)"   ' &xxxx;
      	sbad = sbad & "|" & "eval\s*\("    ' eval  ( 
       	sbad = sbad & "|" & "(event\s*=)"  ' event  =
      	
      	'Now lets check for encoding
      	sbad = Replace(sbad,"<", "(<|%60|<)")
      	sbad = Replace(sbad,">", "(>|%62|>)")
      	
      	o.IgnoreCase = True 'ignore case of string
      	o.Global =False 'stop on first hit
      
      	o.Pattern = sBad
      
      	ValidateTags = o.Test(QueryString)
      
      	Set o = Nothing
      End Function
      						

Riferimenti

Per ulteriori informazioni, vedere il seguente materiale informativo della Computer Emergency Response Team (CERT) presso la Carnegie Mellon University:
http://www.cert.org/advisories/CA-2000-02.html
Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
252985How to: Prevent Cross-Site Scripting Security problemi per applicazioni Web
253121Come codice MTS/ASP di revisione per la vulnerabilitÓ CSSI
253120How to: Revisione codice generato da Visual InterDev per la vulnerabilitÓ CSSI
253117Come impedire la vulnerabilitÓ CSSI di Internet Explorer e Outlook Express
Microsoft fornisce informazioni su come contattare altri produttori allo scopo di facilitare l'individuazione del supporto tecnico. Queste informazioni sono pertanto soggette a modifica senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni sul contatti-altri produttori.

ProprietÓ

Identificativo articolo: 253119 - Ultima modifica: venerdý 8 luglio 2005 - Revisione: 1.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Active Server Pages 4.0
Chiavi:á
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 253119
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com