So überprüfen ASP-Code für die Sicherheitsanfälligkeit in CSSI

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 253119 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel beschreibt, zum Identifizieren und richtige Active Server Pages (ASP) Anwendungen, die zu Cross-Site Scripting Security Issues (CSSI) anfällig sind. Nur Eingaben, die nicht richtig überprüft oder formatiert ist macht die Anwendung anfällig für Angriffe.

Weitere Informationen

Die folgenden Schritte helfen Ihnen zu identifizieren und Korrigieren von ASP-Anwendungen, die anfällig für CSSI sind:
  1. Suchen Sie nach ASP-Code, HTML-Code angezeigt werden generiert. ASP schreibt HTML in die Ausgabe gibt es zwei Möglichkeiten:
    Response.Write
    					
    -und-
    <% =
    					
  2. Bestimmen Sie, ob die HTML-Ausgabe Eingabeparameter enthält. Dieser Parameter können aus einer Vielzahl von Quellen stammen. Die folgende Liste enthält allgemeine Eingabequellen:

    Tabelle minimierenTabelle vergrößern
    Eingabe QuelleBeispiel für ASP-Code-Zugriffsmethode
    Request.Form-Auflistung
    Response.Write Request.Form("username")
    									
    Request.QueryString (Auflistung)
    <%=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>
    									
    Objekt anfordern
    Response.Write("username")
    									
    Datenbanken / Data Zugriffsmethoden
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    Cookies-Auflistung
    Response.Write Request.Cookie("username")
    									
    Sitzungs- und Anwendungsvariablen
    Response.Write Session("username")
    									
  3. Wenn Sie ASP-Code, die HTML mithilfe von Eingaben generiert gefunden, müssen Sie Lösungen für Ihre spezielle Anwendung bewerten. Die folgenden Lösungen stellen einige allgemeine Konzepte können Sie die Vermeidung von CSSI zu beginnen.

    Bitte beachten Sie, dass wenn Filterung oder Codierung, Sie müssen an einen Zeichensatz für Ihre Webseiten um sicherzustellen, dass Ihr Filter für das entsprechenden Sonderzeichen sucht. Die Daten in Ihre Webseiten eingefügt sollten Bytesequenzen herausfiltern, die spezielle auf Grundlage der spezifischen Zeichensatzes (Zeichensatz betrachtet werden). Beliebte Zeichensatz ist ISO 8859-1, die Standardeinstellung in frühen Versionen von HTML und HTTP. Sie müssen Konto-Lokalisierungsprobleme Wenn Sie diese Parameter ändern werden.
    • Verwenden Sie die HTMLEncode -Methode, um Eingabeparameter zu codieren, beim Generieren der Anzeige.

      Im Allgemeinen können die meisten CSSI-Angriffe verhindert werden, indem HTMLEncode auf Eingabeparametern. Unter HTMLEncode funktioniert durch Ersetzen von Zeichen, die in HTML zu HTML-Variablen besondere Bedeutung haben, die diese Zeichen darstellen (z. B. & = & "="). Bitte beachten Sie, die nur die Daten verschlüsselt werden müssen und nicht die vollständigen Zeichenfolgen.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER kann verwendet werden, die Domäne beschränken von der Anforderungen gesendet werden können.

      HTTP_REFERER gibt eine Zeichenfolge, die den URL der ursprünglichen Anforderung enthält, wenn eine Umleitung aufgetreten ist. Webserver können die Referenzfeld überprüfen, beim Empfangen eines ausgefüllten Formulars und wenn es nicht aus der richtigen Stelle stammt ablehnen. Sie können die HTTP_REFERER auf folgende Weise überprüfen:
         <%
         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
         %> 
      							
      Hinweis : das Feld Verweiser hat einige Einschränkungen:
      • Sie riskieren legitime Formular Übermittlungen blockieren.
      • Die Verknüpfung möglicherweise stammen aus einer E-mail oder Textmarke, die nicht über einen URL verfügt.
      • Browser möglicherweise absichtlich Feld Verweiser z. B. während einer HTTPS-Anforderung deaktivieren.
    • Verwenden Sie URLEncode , um URLs empfangen als Eingabeparameter zu codieren.

      Die URLEncode -Methode wendet URL-Codierung Regeln, einschließlich Escapezeichen mit einer angegebenen Zeichenfolge. Sie sollten eingehenden URLs codieren, ehe Sie. Hier ist ein Beispiel für URLEncode :
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • Entfernen Sie oder ändern Sie Sonderzeichen aus Eingabeparameter. Sonderzeichen enthalten die folgenden:
      < > " ' % ; ) ( & +
      							
      Sie entfernen können, oder Zeichen ändern, wenn Sie gelesen werden oder wenn Sie diese an den Browser je nach Anwendung anzeigen.

      In diesem Beispiel wird "" JavaScript "" verwendet, um Sonderzeichen zu filtern:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      dieses Beispiel verwendet reguläre Ausdrücke in Visual Basic Scripting Edition Version 5.0, um Sonderzeichen zu filtern:
      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
      						

Informationsquellen

Weitere Informationen finden Sie die folgende Empfehlung aus dem Computer Emergency Response Team (CERT) an der Carnegie Mellon University:
http://www.cert.org/advisories/CA-2000-02.html
Weitere Informationen finden Sie folgenden Artikel der Microsoft Knowledge Base:
252985Gewusst wie: Verhindern von Cross-Site Scripting Sicherheitsprobleme für Webanwendungen
253121So überprüfen MTS-ASP-Code für die Sicherheitsanfälligkeit in CSSI
253120Überprüfen von Visual InterDev generierten Code für die Sicherheitsanfälligkeit in CSSI
253117Gewusst wie: Sicherheitsanfälligkeit in Internet Explorer und Outlook Express CSSI verhindern
Die Kontaktinformationen bezüglich der in diesem Artikel erwähnten Fremdanbieter sollen Ihnen helfen, den benötigten technischen Support zu finden. Diese Kontaktinformationen können ohne vorherige Ankündigung geändert werden. Microsoft garantiert nicht die Genauigkeit dieser Kontaktinformationen von Drittanbietern.

Eigenschaften

Artikel-ID: 253119 - Geändert am: Freitag, 8. Juli 2005 - Version: 1.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Active Server Pages 4.0
Keywords: 
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 253119
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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