Autor: BIBI
Wenn wir an Hacker denken, ist ein Hacker oft so: eine einsame Person, die still und leise in die Server anderer Leute eindringt, um die geheimen Informationen anderer Leute zu zerstören oder zu stehlen. Vielleicht verändert er unsere Homepage oder stiehlt sogar die Kreditkartennummern und Passwörter der Kunden. Darüber hinaus können Hacker Kunden angreifen, die unsere Website besuchen. Gleichzeitig wurde unser Kellner auch sein Komplize. Microsoft nennt diesen Angriff einen „Cross-Site-Scripting“-Angriff. Die meisten dieser Angriffe erfolgen, wenn die Website dynamisch Webseiten generiert, das Ziel des Hackers jedoch nicht Ihre Website, sondern die Kunden ist, die die Website durchsuchen.
Beschreibung von Cross-Site-Script-Angriffen
In einer Zeitschrift mit dem Titel <<ADVISORY CA--2000-02>> warnt CERT alle: Wenn der Server die Eingaben des Kunden nicht effektiv überprüft, gibt der Hacker bösartigen HTML-Code ein, wenn dieser HTML Wenn Code-Eingaben in SCRIPT-Programmen verwendet werden, können sie damit Schaden anrichten, z. B. durch das Einfügen abscheulicher Bilder oder Töne usw., und gleichzeitig kann es auch das korrekte Navigieren der Kunden auf der Webseite beeinträchtigen.
Wir wissen, dass einige Freunde auf einige verdächtige kostenlose Websites verwiesen wurden und nur 10 bis 20 kleine Fenster hatten. Diese Fenster wurden oft von ungültigen Schaltflächen begleitet, die von JAVA oder JAVASCRIPT generiert wurden. Das Schließen dieser Fenster ist vergebens. Jedes Mal, wenn wir ein Fenster schließen, werden 10 weitere Fenster geöffnet. Diese Situation tritt häufig auf, wenn der Administrator nicht verfügbar ist. Mausvorfälle sind ein typisches Beispiel dafür, dass Hacker standortübergreifende SCRIPT-Methoden nutzen, um Kunden anzugreifen.
Schädliche Tags und Skripte sind nicht nur Streiche, sie können sogar Daten stehlen und Systeme beschädigen. Ein schlauer oder auch nicht so schlauer Hacker kann SCRIPT verwenden, um die Dateneingabe auf dem Server zu stören oder zu ändern. Mit SCRIPT-Codes können auch Kundensysteme angegriffen und Ihre Festplatte komplett beschädigt werden. Und Sie müssen wissen, dass während Sie den Server nutzen, das SCRIPT des Hackers auch an einem sicheren Ort auf Ihrem Server läuft! Wenn Kunden Ihrem Server vertrauen, vertrauen sie auch bösartigem SCRIPT-Code. Auch dieser Code stammt vom Server des Hackers in der Form <SCRIPT> oder <OBJECT>.
Auch der Einsatz einer Firewall (SSL) kann standortübergreifende SCRIPT-Angriffe nicht verhindern. Denn wenn das Gerät, das den bösartigen SCRIPT-Code generiert hat, ebenfalls SSL verwendet, kann das SSL unseres Servers den Code nicht identifizieren. Werden wir die Website, der unsere Kunden einst so sehr vertrauten, einfach den Hackern übergeben? Und die Existenz einer solchen Zerstörung wird den Ruf Ihrer Website völlig schädigen.
1. Beispiel für einen Cross-Site-SCRIPT-Angriff:
Laut CERT-Informationen hat dynamische Eingabe im Allgemeinen die folgenden Formen: URL-Parameter, Tabellenelemente, COOKISE und Datenanfragen. Lassen Sie uns diese Website mit nur zwei Seiten analysieren. Der Name der Website lautet: MYNICESITE.COM. Die erste Seite verwendet ein Formular oder ein COOKIE, um den Benutzernamen zu erhalten:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<TITLE>MyNiceSite.com Home Page</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite .com</H2>
<FORM method="post" action="page2.asp">
Geben Sie Ihren MyNiceSite.com-Benutzernamen ein:
<INPUT type="text" name="userName">
<INPUT type="submit" name= "submit" value="submit">
</FORM>
</BODY>
</HTML>
<% End If %>
Die zweite Seite gibt den Benutzernamen zur Begrüßung zurück:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" Then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName" )
End If %>
<HTML>
<HEAD></HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %> </H3>
</BODY>
</HTML>
Wenn Sie normalerweise Wann Text eingeben, alles funktioniert einwandfrei. Wenn Sie den Skriptcode eingeben: <SCRIPT>alert('Hallo.';</script>), wird die JavaScript-Warnung angezeigt.
Bei Ihrem nächsten Besuch wird diese Warnmeldung ebenfalls angezeigt. Dies liegt daran, dass der Skriptcode lautet Es ist bereits beim ersten Besuch im Cookie enthalten.
Wenn Sie glauben, dass dies ein Sonderfall ist, können Sie es auch anderswo ausprobieren Große Regierungswebsites, Bildungswebsites und kommerzielle Websites haben die oben beschriebene Situation. Ich habe sogar festgestellt, dass die Website, auf der ich häufig Kreditkarten verwende, die Eingaben nicht
filtert Unter Hackern ist ein Hacker oft so: Ein einsamer Mensch, der heimlich in die Server anderer Leute eindringt, um die geheimen Informationen anderer Leute zu zerstören oder sogar die Kreditkartennummern und Passwörter von Kunden zu stehlen. Hacker greifen auch Kunden an, die unsere Website besuchen. Die meisten dieser Angriffe erfolgen, wenn die Website dynamisch Webseiten generiert, aber das Ziel des Hackers ist nicht Ihre Website, sondern die Kunden
Die Beschreibung von Cross-Site-Script-Angriffen
findet sich in einem Buch mit dem Titel<<
ADVISORY CA --2000-02>>In dem Magazin warnte CERT alle: Wenn der Server die Eingaben des Kunden nicht effektiv überprüft gibt einige bösartige HTML-Codes ein. Wenn diese HTML-Code-Eingaben in SCRIPT-Programmen verwendet werden, können sie Schaden anrichten, z '
Wir wissen, dass einige Freunde auf verdächtige kostenlose Websites verwiesen wurden und nur 10 davon bekamen. Diese Fenster werden oft von ungültigen Schaltflächen begleitet, die von JAVA oder JAVASCRIPT generiert wurden Das Schließen dieser Fenster ist vergeblich. Diese Situation tritt häufig auf, wenn der Administrator nicht anwesend ist Cross-Site-SCRIPT-Methoden zum Angriff auf Kunden
sind nicht nur einfache Streiche, sie können sogar Daten stehlen und das System zerstören Die Verwendung von SCRIPT-Code kann auch das Client-System angreifen, und Sie müssen wissen, dass das SCRIPT des Hackers auch an einem sicheren Ort auf Ihrem Server ausgeführt wird Vertrauen Sie diesen bösartigen SCRIPT-Codes, auch wenn der Code mit <SCRIPT> oder <OBJECT> beginnt. Das Formular stammt vom Server des Hackers.
Auch der Einsatz einer Firewall (SSL) verhindert nicht standortübergreifende SCRIPT-Angriffe. Denn wenn das Gerät, das den bösartigen SCRIPT-Code generiert hat, ebenfalls SSL verwendet, kann das SSL unseres Servers den Code nicht identifizieren. Werden wir die Website, der unsere Kunden einst so sehr vertrauten, einfach den Hackern übergeben? Und die Existenz einer solchen Zerstörung wird den Ruf Ihrer Website völlig schädigen.
1. Beispiel für einen Cross-Site-SCRIPT-Angriff:
Laut CERT-Informationen hat dynamische Eingabe im Allgemeinen die folgenden Formen: URL-Parameter, Tabellenelemente, COOKISE und Datenanfragen. Lassen Sie uns diese Website mit nur zwei Seiten analysieren. Der Name der Website lautet: MYNICESITE.COM. Die erste Seite verwendet ein Formular oder ein COOKIE, um den Benutzernamen zu erhalten:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<TITLE>MyNiceSite.com Home Page</TITLE>
</HEAD>
<BODY>
<H2>MyNiceSite .com</H2>
<FORM method="post" action="page2.asp">
Geben Sie Ihren MyNiceSite.com-Benutzernamen ein:
<INPUT type="text" name="userName">
<INPUT type="submit" name= "submit" value="submit">
</FORM>
</BODY>
</HTML>
<% End If %>
Die zweite Seite gibt den Benutzernamen zur Begrüßung zurück:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" Then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName" )
End If %>
<HTML>
<HEAD></HEAD>
<BODY>
<H3 align="center">Hello: <%= strUserName %> </H3>
</BODY>
</HTML>
Wenn Sie normalerweise Wann Text eingeben, alles funktioniert einwandfrei. Wenn Sie den Skriptcode eingeben: <SCRIPT>alert('Hallo.';</script>), wird die JavaScript-Warnung angezeigt.
Bei Ihrem nächsten Besuch wird diese Warnmeldung ebenfalls angezeigt. Dies liegt daran, dass der Skriptcode lautet Es ist bereits beim ersten Besuch im Cookie enthalten.
Wenn Sie glauben, dass dies ein Sonderfall ist, können Sie es auch anderswo ausprobieren Bei großen Regierungswebsites, Bildungswebsites und kommerziellen Websites kommt es sogar zu der oben genannten Situation. Ich habe sogar festgestellt, dass die Website, auf der ich häufig Kreditkarten verwende, die Eingaben nicht filtert.
Teil 2: : Cross-Site-Script-Angriffe verhindern.
1. So verhindern Sie, dass Server durch Cross-Site-Script-Angriffe angegriffen werden.
Glücklicherweise wird die Technologie zur Verhinderung von Cross-Site-Script-Angriffen immer perfekter. Derzeit können mehrere Methoden angewendet werden, um Cross-Site-Script-Angriffe zu verhindern:
1. Kodieren Sie die Zeichen der dynamisch generierten Seite.
Andernfalls müssen Sie die Zeichen der dynamisch generierten Seite kodieren Hacker sind sehr angreifbar. Es ist möglich, Ihre Charaktereinstellungen zu ändern, um Ihre Abwehrkräfte leicht zu umgehen. Wenn es sich bei unserer Website um eine englische Website handelt, müssen wir nur die Zeichenkodierung auf das lateinische Zeichen ISO-8859-1 einstellen. Die spezifische Situation ist wie folgt:
<META http-equiv="Content-Type" content="text/html ;charset= ISO-8859-1">
2. Filtern und begrenzen Sie alle Eingabedaten.
Dies ist die zweite Methode, um Cross-Site-Script-Angriffe zu verhindern. Lassen Sie beim Anmelden nicht zu, dass diese Sonderzeichen eingegeben werden. Daher können wir das JAVASCRIPT-Programm zur ONSUBMIT-Methode hinzufügen, um diese Funktion abzuschließen. In diesem Beispiel beschränken wir die Eingabe auf 15 Zeichen. Dies verhindert die Eingabe längerer Skripte.
Im Buch <<Knowledge Base Article QA252985>>Microsoft stellt ein kurzes Javascript-Programm zur Verfügung, um die Filterung der Eingabedaten abzuschließen. Wir haben diesen Code auch für unser Beispiel entsprechend der spezifischen Situation eingeführt, wie zum Beispiel:
function checkForm() {
document.forms
[0].userName.value = _
RemoveBad(document.forms[0].userName.value);
;
}
// MICROSOFT-CODE
-Funktion RemoveBad(strTemp) {
strTemp = strTemp.replace(/</>/"/'/%/;/(/)/&/+/- /g ,"");
return strTemp;
}
Mit dieser Methode können Sie diese in der Eingabe enthaltenen Zeichen filtern:
%
<
> [ ] { } ;
Die oben genannte Methode zum Filtern und Einschränken von Eingaben ist eine sehr wichtige Verteidigungsmethode, aber sie ist immer noch machtlos gegen meinen E-Mail-basierten Angriff. Weil ich die URL-Parameter direkt in die E-Mail eingefügt habe. Als Reaktion auf diese Situation müssen wir eine stärkere Sicherheitsmaßnahme ergreifen. Wenn wir ASP verwenden, ist die Lösung relativ einfacher. Nur HTML und URL kodieren die dynamisch generierten Webseiten. Für die Situation in unserem Beispiel haben wir auf der ersten Eingabeseite die folgenden Änderungen an der Weiterleitungs-URL vorgenommen:
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Response.Cookies("userName"))
Auf der Ausführungsseite haben wir Folgendes hinzugefügt:
strUserName = server .HTMLEncode(Request.QueryString("userName"))
und
strUserName =server.HTMLEncode(Request.Form("userName"))
Microsoft empfiehlt, dass alle Eingaben und Ausgaben dynamischer Seiten codiert werden sollten. Dies sollte auch beim Speichern und Abrufen von Daten aus der Datenbank gelten. Dadurch können Sie Cross-Site-Script-Angriffe weitgehend vermeiden.
Fügen Sie dazu Page1.asp hinzu:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
'umleiten, wenn das Cookie erkannt wird.
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Request.Cookies("userName"))
Response.Redirect(strRedirectUrl)
Else %>
<HTML>
<HEAD>
<META http-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<TITLE>MyNiceSite.com Home Page</TITLE>
</ HEAD>
<script LANGUAGE="javascript">
!--
function checkForm() {
document.forms[0].userName.value =
RemoveBad
(document.forms[0].userName.value)
;
//************************************************** ******
//Programmierer: KEIN ORIGINALCODE – KOMMT VON MICROSOFT
//
Codequelle: Microsoft Knowledge Base-Artikel Q25z985
//Beschreibung: Entfernt fehlerhafte Zeichen.
***** *****************************************
function RemoveBad(strTemp) {
strTemp =strTemp.replace(/</>/"/'/%/;/(/)/&/+/-/g, "");
return strTemp;
}
//-->
</SCRIPT>
<BODY>
<BR>
<H2>MyNiceSite.com</H2>
<BR>
<FORM method="post"action="page2.asp" onsubmit="return checkForm ();">
Geben Sie Ihren MyNiceSite.com-Benutzernamen ein:
<INPUT type="text"name="userName" width="10" maxwidth="10">
<INPUT type="submit"name="submit" value=" „submit“>
</FORM>
</BODY>
</HTML>
<% end if %>
Fügen Sie Folgendes zu Page2.asp hinzu:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<>"" Then
strUserName =server.HTMLEncode(Request.QueryString("userName"))
Else
Response.Cookies("userName") =Request.Form("userName")
strUserName = server.HTMLEncode(Request.Form("userName"))
End If %>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/ html;charset=ISO-8859-1">
</HEAD>
<BODY>
<H3 align="center">Hallo: <%= strUserName %></H3>
</BODY>
</HTML>
Jetzt aus diesem Grund Der Angriff konnte wirksam verhindert werden. Nachdem diese schädlichen Tags und Skripte codiert wurden, werden sie wie unten gezeigt in Textform angezeigt:
Wir können auch eine IIS-Komponente hinzufügen, um alle Sonderzeichen aus der dynamischen Eingabe zu filtern. Für bereits entwickelte Websites ist es sehr einfach, mit dieser Methode Cross-Site-Script-Angriffe zu verhindern. Unsere Steuerung kann das REQUEST-Ziel von der ASP-Seite abfangen und den Inhalt von Tabellen, Cookies, Anforderungszeichenfolgen und Programmen erkennen:
Wir können dieser Komponente auch statistische Daten hinzufügen, indem wir Protokolldateien schreiben. Immer wenn ein Client ein unzulässiges Zeichen eingibt, protokolliert diese Komponente seine IP-Adresse und die Uhrzeit. Einzelheiten finden Sie im Artikel „<<Roll your Own IIS Application on ASPToday>>“ von Doug Dean.
Wir müssen nur einige einfache Schritte unternehmen, um Cross-Site-Script-Angriffe effektiv zu verhindern. Zusätzlich zu den drei oben genannten Methoden empfehlen Microsoft und CERT auch dringend die Verwendung einer Methode, die sie „Sanity Check“ nennen. Wenn es beispielsweise ein Eingabefenster gibt, das nur die Eingabe von Zahlen zulässt, beschränken wir es so, dass nur die Eingabe von Zahlen von 0 bis 9 möglich ist. Die von Microsoft und CERT verwendete Methode zur Begrenzung der Eingabezeichen ist viel besser als das alleinige Filtern von Sonderzeichen. Durch diese Maßnahmen können Sie die Kunden schützen, die Ihre Website besuchen, während sie sich dort aufhalten.
2. So schützen Sie Ihren Browser vor Hackerangriffen:
Wie vermeiden Sie Angriffe, wenn Sie im Internet unterwegs sind? Microsoft und CERT raten davon ab, online herumzuspielen. Als Reaktion auf diese Situation gab der Autor einer Kolumne im PC Magazine namens John Dvorack eine interessante Antwort. Er glaubt, dass es sich hierbei um eine vorsätzliche Handlung von Microsoft handelt: um Internet-Surfer dazu zu bringen, auf sicheren Seiten wie America Online und MSN.com zu surfen.
In unserem Beispiel können Sie, selbst wenn Sie nicht im Internet herumlaufen, nicht verhindern, dass Sie online von Hackern angegriffen werden. Ironischerweise gehen die meisten Gefahren von den Websites aus, denen wir am meisten vertrauen. Wenn Sie möchten, dass Ihre Website störungsfrei ist, dürfen Sie keine dynamischen Inhalte oder Cookies herunterladen. Einzelheiten entnehmen Sie bitte den entsprechenden Informationen Ihres Browsers.
Microsoft warnt Sie außerdem, das Active Script Ihres Browsers auf einen stark eingeschränkten Zustand und Ihre E-Mails auf einen stark eingeschränkten Empfangsmodus zu setzen. Seien Sie vorsichtig, wenn Sie in E-Mails auf Links klicken. Weitere Informationen finden Sie im Buch <<Microsoft's Knowledge Base Article Q253117>>. Für alle Fälle sollten Sie besser mehr Online-Erfahrung haben und jederzeit vorsichtig sein.
Fazit
Wenn Sie ein ehemaliger UNIX-Programmierer sind, wissen Sie möglicherweise nicht, was Cross-Site-Scripting bedeutet. Sie wissen, dass der Benutzername und das Passwort für die Anmeldung bei vielen Sites „root“ bzw. „root“ lauten. Ebenso lauten der Name und das Passwort vieler Datenbankadministratoren „sa“ bzw. „password“. Sie kennen auch Webzine (z. B. Phrack und Alt2600), mit denen Sie Schritt für Schritt die Schwachstellen eines bestimmten Servers erkennen können. Bei dieser Art von Hardware wissen Sie auch, dass sich viele Website-Datenbankserver und Webserver nicht selbst schützen. Sobald sie auf einen Hacker trifft, wird die Maschine lahmgelegt.
Obwohl es einfach ist, Maßnahmen zu ergreifen, um unsere Systeme vor Hackern zu schützen, sind unsere Systeme immer Hackern ausgesetzt. Es gibt allen Grund zu der Annahme, dass im nächsten Jahr einige neue Sicherheitslücken auftreten werden.
In
einem unter der Leitung von Herrn John Howard von der CERT Company verfassten Artikel heißt es: „Aktuellen Untersuchungen zufolge wird jede Website mit einem Domainnamen im Internet durchschnittlich mindestens einmal im Jahr von Hackern angegriffen.“
Der Angriff ist unerträglich. Cross-Site-Scripting-Angriffe sind eine weitere Methode, die Hacker einsetzen können. Aber wir können diese Form des Angriffs verhindern, solange wir die oben erwähnte einfache Verarbeitung durchführen.