Vermeiden standortübergreifender Skripting-Sicherheitsprobleme

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 252985 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D41412
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
252985 How to prevent cross-site scripting security issues
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dynamisch generierte HTML-Seiten können Sicherheitsrisiken mit sich bringen, falls Eingaben nicht während ihres Ein- oder Ausgangs überprüft werden. In Eingaben, die an Webseiten übertragen werden, können schädliche Skripts eingebettet werden, die für den Browser scheinbar aus einer vertrauenswürdigen Quelle stammen. Dieses Problem wird als "standortübergreifendes Skripting-Sicherheitsproblem" bezeichnet. In diesem Artikel werden derartige Probleme, ihre Auswirkungen und ihre Vermeidung erörtert.

Weitere Informationen

Das Problem

Das grundlegende Problem ist, dass viele Webseiten auch ungeprüfte Eingaben anzeigen. Werden Eingaben nicht überprüft, können schädliche Skripts in diese Eingaben eingebettet werden. Wird diese nicht überprüfte Eingabe dann durch ein serverseitiges Skript angezeigt, wird das Skript auf dem Browser so ausgeführt, als würde es aus einer vertrauenswürdigen Quelle stammen.

Auswirkungen

Werden Eingaben für Ihre dynamischen Webseiten nicht überprüft, können die folgenden Probleme auftreten:
  • Die Datenintegrität kann gefährdet sein.
  • Cookies können gesetzt und gelesen werden.
  • Benutzereingaben können abgefangen werden.
  • Schädliche Skripts können durch den Client im Kontext der vertrauenswürdigen Quelle ausgeführt werden.
Für welche Webseiten besteht ein Risiko? Dieses Problem betrifft hauptsächlich die dynamische Seitenerstellung auf der Grundlage nicht überprüfter Eingaben. Zu den Webseitentypen, die den genannten Risiken ausgesetzt sind, zählen zum Beispiel die folgenden:
  • Suchmaschinen, die Ergebnisseiten auf der Grundlage von Benutzereingaben zurückgeben.
  • Anmeldeseiten, die Benutzerkonten in Datenbanken, Cookies etc. speichern und später den Benutzernamen an den Client übermitteln.
  • Webformulare, die Kreditkarteninformationen verarbeiten.

Vermeidung

Dieser Abschnitt beschreibt einige Vorgehensweisen, mit denen Angriffe verhindert werden können, die standortübergreifende Skripting-Sicherheitsprobleme ausnutzen. Analysieren Sie Ihre spezifische Situation, um zu ermitteln, welche Verfahren für Sie am besten geeignet sind. In diesem Zusammenhang ist zu beachten, dass Sie bei allen hier beschriebenen Verfahren Daten überprüfen, die aus Eingaben und nicht aus Ihrem vertrauenswürdigen Skript stammen. Vermeidung bedeutet in diesen Fällen vor allem, angemessene Codierungsverfahren durch Überprüfung aller Eingaben für Ihre Routinen anzuwenden.

Nachfolgend werden allgemeine Vorgehensweisen zur Vermeidung standortübergreifender Skripting-Sicherheitsprobleme erläutert:
  • Codierung der auf Eingabeparametern basierenden Ausgabe.
  • Filterung der Eingabeparameter auf Sonderzeichen.
  • Filterung der auf Eingabeparametern basierenden Ausgabe auf Sonderzeichen.
Bei einer Filterung oder Codierung müssen Sie einen Zeichensatz für Ihre Webseiten festlegen, um sicherzustellen, dass Ihr Filter nach den richtigen Sonderzeichen sucht. Aus den Daten, die in Ihre Webseiten eingefügt werden, sollten Bytesequenzen ausgefiltert werden, die auf der Grundlage des spezifischen Zeichensatzes als Sonderzeichen gelten. Ein häufig verwendeter Zeichensatz ist ISO 8859-1, der in frühen Versionen von HTML und HTTP standardmäßig eingesetzt wurde. Bei der Änderung dieser Parameter müssen Sie Lokalisierungsaspekte berücksichtigen.

Codierung der auf Eingabeparametern basierenden Ausgabe

Codieren Sie als Eingabe empfangene Daten, wenn Sie diese im HTML-Format ausschreiben. Dieses Verfahren ist für Daten effektiv, die während der Eingabe aus irgendeinem Grund nicht überprüft wurden. Durch Einsatz von Verfahren wie URLEncode und HTMLEncode können Sie die Ausführung eines schädlichen Skripts verhindern.

Die folgenden Codeausschnitte demonstrieren den Einsatz von URLEncode und HTMLEncode in Active Server Pages (ASP):
<%
      var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
      Response.write("<a href=\"" + BaseUrl +
      Server.URLEncode(Request.QueryString("SearchString")) +
      "\">click-me</a>");
%>
<% Response.Write("Hello visitor <I>" +
      Server.HTMLEncode(Request.Form("UserName")) +
      "</I>");
%>
				
Wenn Sie HTML und URLs codieren, müssen Sie die Codeseite möglicherweise so angeben, wie Sie dies bei der Filterung von Daten tun würden

Beachten Sie, dass durch das Aufrufen von HTMLEncode für die Zeichenfolge, die gerade angezeigt werden soll, die Ausführung jeglicher Skripts verhindert und somit das in diesem Artikel beschriebene Problem vermieden wird.

Filterung der Eingabeparameter auf Sonderzeichen

Die Filterung der Eingabe besteht darin, einige oder alle Sonderzeichen aus dieser Eingabe zu entfernen. Sonderzeichen sind Zeichen, die die Skriptgenerierung innerhalb eines HTML-Streams ermöglichen. Sonderzeichen sind zum Beispiel die folgenden:
< > " ' % ; ) ( & + -
				
Beachten Sie, dass Ihre spezifische Situation es erfordern kann, zusätzlich zu den Sonderzeichen weitere Zeichen oder Zeichenfolgen auszufiltern.

Eine Filterung kann zwar effektiv sein, es bestehen jedoch auch einige Vorbehalte:
  • Bei bestimmten Typen von Eingaben ist eine Filterung möglicherweise ungeeignet. Beispielsweise sollten Sie in Szenarios, in denen Sie Eingaben des Typs <TEXT> von einem HTML-Formular erhalten, besser eine Methode wie die Codierung anwenden (siehe unten).
  • Einige der ausgefilterten Zeichen werden von dem serverseitigen Skript unter Umständen tatsächlich benötigt.
Nachfolgend sehen Sie einen in JavaScript geschriebenen Beispielfilter, mit dem Sonderzeichen entfernt werden:
function RemoveBad(strTemp) { 
    strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
    return strTemp;
} 
				
Durch den folgenden Code werden Benutzereingaben verarbeitet, bevor sie für die spätere Nutzung gespeichert werden.
<% Session("StoredPreference") = RemoveBad(Request.Cookies("UserColor"));
         var TempStr = RemoveBad(Request.QueryString("UserName"));				

Filterung der auf Eingabeparametern basierenden Ausgabe auf Sonderzeichen

Dieses Verfahren ähnelt der Filterung von Eingaben, wobei hier jedoch Zeichen gefiltert werden, die an den Client ausgeschrieben werden. Dieses Verfahren kann zwar effektiv sein, kann jedoch bei Webseiten, die HTML-Elemente ausschreiben, ein Problem darstellen.

Zum Beispiel würde eine generische Funktion zum Entfernen von Sonderzeichen auf einer Seite, die Elemente des Typs <TABELLE> ausschreibt, die Zeichen < und > entfernen, wodurch der Tag <TABELLE> unbrauchbar wird. Damit dieses Verfahren sinnvoll eingesetzt werden kann, sollten Sie daher nur Daten filtern, die von außen kommen oder zuvor von einem Benutzer eingegeben und in einer Datenbank gespeichert wurden.

Mögliche Quellen schädlicher Daten

Das hier geschilderte Problem besteht für alle Seiten, die Eingaben verwenden, um HTML dynamisch zu generieren. Nachfolgend sind einige mögliche Quellen schädlicher Daten aufgeführt, die Ihnen helfen sollen, stichprobenartig nach potenziellen Sicherheitsrisiken zu suchen.
  • Abfragezeichenfolgen
  • Cookies
  • Eingestellte Daten
  • URLs und Teile von URLs, wie zum Beispiel "PATH_INFO"
  • Von Benutzern abgerufene Daten, die auf irgendeine Art gespeichert werden (zum Beispiel in einer Datenbank)

Schlussfolgerung

Abschließend sei nochmals an folgende wichtige Punkte in Bezug auf standortübergreifende Skripting-Sicherheitsprobleme erinnert:
  • Das Problem betrifft die dynamische Erstellung von Seiten auf der Grundlage nicht überprüfter Eingaben.
  • Die Unterlassung der Überprüfung von Eingabedaten kann zu unerwarteten Sicherheitsproblemen führen. Sie können das Problem durch die Einhaltung angemessener Entwicklungsstandards (zum Beispiel die Überprüfung von Eingaben) vermeiden.
  • Sie müssen Lösungen auf Site-, Seiten- und sogar Feldebene überprüfen und ein sinnvolles Verfahren einsetzen.

Informationsquellen

Weitere Informationen können Sie dem folgenden Leitfaden des Computer Emergency Response Team (CERT) der Carnegie Mellon-Universität entnehmen:
http://www.cert.org/advisories/CA-2000-02.html
Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
253117 Verhindern von Sicherheitsproblemen durch Cross-Site Scripting in Internet Explorer und Outlook Express
253119 Welche Verfahrensweise an Überarbeitung-ASP-Code für CSSI-Sicherheitsanfälligkeit
253120 Welche Verfahrensweise zu Überprüfung Code generierte Visual InterDev für CSSI-Sicherheitsanfälligkeit
253121 Wie Prüfen von MTS/ASP-Code für CSSI-Sicherheitsanfälligkeit

Eigenschaften

Artikel-ID: 252985 - Geändert am: Montag, 10. April 2006 - Version: 3.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Active Server Pages 2.0
  • Microsoft Active Server Pages 3.0
  • Microsoft Windows 2000 Server
Keywords: 
kbcodesnippet kbcssi kbhowto kbsecurity KB252985
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.

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