1. Prinzip des Angriffs
Cookies -Spoofing verwendet hauptsächlich die unsichere Praxis, Benutzeranmeldeinformationen in Cookies im aktuellen Netzwerk zu speichern.
Wir wissen, dass ein allgemeiner Cookies-basiertes Benutzersystem mindestens zwei Variablen in Cookies speichert: Benutzername und UserLevel, wobei der Benutzername der Benutzername ist und BenutzerLevel die Benutzerebene ist. Wenn unser Browser auf die ASP -Seite zugreift, wird er so etwas wie abgibt
Get /.../file.asp http 1.0
...
Cookies: userername = user & userLevel = 1
...
Solange wir die Benutzernamen- und UserLevel -Werte des Administrators kennen (unter der Annahme von Administrator bzw. 5), können wir ihn übertragen
Get /.../file.asp http 1.0
...
Cookies: userername = admin & userLevel = 5
...
um Administratorberechtigungen zu erhalten. Sehr einfach, oder? Bevor die Verwundbarkeit jedoch entdeckt wurde, stützten sich fast alle Benutzerverwaltungssysteme auf Cookies.
2. Speichern Sie die Benutzerinformationen sicher
Da Cookies unsicher sind und wir Benutzeranmeldeinformationen speichern müssen, wo sollten sie gespeichert werden?
Wir haben festgestellt, dass es in ASP zusätzlich zu Cookies auch eine Sitzung gibt, die Informationen speichern kann. Die Sitzung wird auf dem Server gespeichert und kann vom Client nach Belieben nicht geändert werden, sodass es eine äußerst hohe Sicherheit hat. Auf diese Weise kann jeder den Code aller Cookies in die Sitzung ändern.
3. Speichern Sie die Benutzerinformationen für eine lange Zeit
Die Sitzung wird verwendet, um die Anmeldeinformationen der Benutzer zu speichern. In diesem Abschnitt beschriebene Methode wird erzeugt.
Es gibt zwei Varianten dieser Methode. Geben Sie es nach den Cookies an. Der Code zur Implementierung dieser Methode lautet wie folgt:
VBS:
<%
Dimer Benutzername, Passwort
Benutzername = Sitzung (Benutzername)
Wenn Benutzername = dann
'Es gibt keine Benutzeranmeldeinformationen in der Sitzung
userername = request.cookies (Benutzername)
password = request.cookies (Passwort)
"Achten Sie auf den Benutzernamen und das Passwort, das in den beiden beiden Sätzen erhalten wurde, um SQL -Injektionsanfälligkeiten zu verhindern (d. H. Einen Zitate herausfiltern"), hier weggelassen
Wenn Benutzername = oder Passwort = dann
'Der Benutzer ist nicht angemeldet
...
anders
'Hier wird angenommen, dass die Conn- und RS -Objekte erstellt wurden
Rs.open Wählen Sie Top 1 * von [Benutzer] WHERE Username = '& Benutzername &' und Passwort = '& Passwort &', Conn, 1, 3
Wenn rs.eof dann
'Die Informationen in den Cookies sind illegal
...
anders
'Die Informationen in den Cookies sind legal und automatisch angemeldet
Sitzung (Benutzername) = Benutzername
...
Ende wenn
Ende wenn
anders
'Benutzerinformationen sind bereits in der Sitzung vorhanden und werden direkt gelesen
...
Ende wenn
%>
JS:
<%
var Benutzername, Passwort;
Benutzername = Sitzung (Benutzername) +;
if (userername == || username == undefiniert) {
// Es gibt keine Benutzerinformationen in der Sitzung
userername = request.cookies (Benutzername) +;
password = request.cookies (Passwort) +;
// achten
if (userername == || username == undefiniert || password == || password == undefiniert) {
// Der Benutzer ist nicht angemeldet
...
}
anders {
// Hier wird angenommen, dass die Conn- und RS -Objekte erstellt wurden
rs.open (Wählen Sie Top 1 * von [Benutzer], wobei userername = ' + userername +' und password = ' + password +', conn, 1, 3);
if (rs.eof) {
// Die Informationen in den Cookies sind illegal
...
}
anders {
// Die Informationen in Cookies sind legal und automatisch angemeldet
Sitzung (Benutzername) = Benutzername +;
...
}
}
}
anders {
// Benutzerinformationen sind bereits in der Sitzung vorhanden und werden direkt gelesen
...
}
%>
Diese Methode ist für Benutzer jedoch nicht sehr sicher, da der Browser jedes Mal, wenn er die Seite besucht, Cookies überträgt und das Konto des Benutzers gestohlen wird, sobald die Cookies, die das Kennwort enthalten, von anderen erhalten werden. Für diesen Fall wird eine zweite Methode angezeigt, dh einen Feldüberprüfungscode in die Benutzerinformationsdatenbank hinzufügen. Der Codewert wird hinzugefügt. Bei der Überprüfung von Benutzerinformationen in Cookies werden nur Benutzername und VerifyCode überprüft. Der Vorteil dieser Methode besteht darin, dass auch wenn die Cookies des Benutzers von einem Hacker erhalten werden, er diesen temporären Verifizierungscode nur zum Anmelden verwenden kann und das Kennwort des Benutzers nicht erhalten kann. Solange sich dieser Benutzer erneut mit dem Benutzernamen und dem Kennwort anmeldet, ändert sich der Wert des Verifizierungscode -Werts und der Hacker kann sich nicht über den ursprünglichen Verifizierungscode anmelden.
Die Implementierung dieser Methode erfordert nur geringfügige Änderungen am oben erwähnten Methodecode. In Ihrem Login -Programm müssen Sie zunächst einen Absatz hinzufügen, in dem die Überprüfung übergeht, um Benutzerinformationen zu speichern:
VBS:
<%
Antwort
%>
JS:
<%
Response.cookies (verifyCode) = math.floor (math.random () * 2100000000);
%>
Ändern Sie dann im oben angegebenen Verifizierungscode die Überprüfung von Cookies (Passwort) in die Überprüfung von Cookies (verifizierenCode).
4. Schlussfolgerung
Durch unsere Analyse und Verarbeitung wurden die Cookies -Spoofing -Schwachstellen vollständig gelöst, und seitdem sind unsere ASP -Programme sicherer geworden.
2007-08-05 20:37 Das Schreiben beginnt
2007-08-05 21:14 Die erste Ausgabe ist abgeschlossen