Bei der ASP-Programmierung kann man sagen, dass die Identitätsauthentifizierung häufig verwendet wird. Aber wie können wir Authentifizierungssicherheit erreichen?
Formulareinreichungsseite: sub.htm
<html>
<Kopf>
<title>Administrator-Login</title>
<Körper>
<form name=form1 method=post action=sub.asp>
<p>Administrator:
<Eingabetyp=Textname=Benutzer-ID-Größe=25, maximale Länge=20>
Passwort:
<Eingabetyp=Textname=Passgröße=12 maxlength=20>
<Eingabetyp=Submit-Name=Submit-Wert=Submit>
</p>
</form>
</body>
</html>
SUB.asp-Programm
<%
Daten vom Formular empfangen
user=request.from(Benutzer-ID)
Überprüfen Sie, ob die vom Formular übermittelten Daten leer sind (Sie können JAVASCRIPT oder VBSCRIPT verwenden, um die Formularseite zu steuern, aber vergessen Sie nicht, sie hier zu steuern!
wenn user= dann
Gehen Sie zur Fehlermeldungsseite!
Response.redirect err1.htm
Dieser Satz ist vielleicht nicht nützlich, aber es ist gut, ihn hinzuzufügen!
Antwort.Ende
Ende wenn
pass=request.from(Pass)
wenn pass= dann
Response.redirect err2.htm
Antwort.Ende
Ende wenn
Datenbank beitreten
file=server.mappath(Ihre Datenbank)
set conn=server.createobject(adodb.connection)
dr=driver={Microsoft Access Driver (*.mdb)};dbq=&file
conn.open dr
set rs=server.createobject(adodb.recordset)
Der Schlüssel ist hier die SQL-Sprache
sql=select * from table where user= &user& and pass= &pass&
rs.opensql
wenn nicht rs.eof dann
Wenn Sie es finden, gehen Sie zur Verwaltungsseite.
Response.redirect login.asp
anders
Wenn es nicht gefunden wird, gelangen Sie auf eine Fehlerseite.
Antwort.write err3.htm
Ende wenn
%>
Jeder ist der Meinung, dass der obige Code in Ordnung sein sollte, aber hier besteht ein ernstes Sicherheitsrisiko:
Wenn ich mich als Administrator anmelden möchte, kann ich in das Eingabefeld des SUb.htm-Formulars Folgendes eingeben:
Geben Sie in das erste Textfeld ein: a oder 1 = 1 oder OR =
Geben Sie in das zweite Textfeld ein: a oder 1 = 1 oder OR =
Senden Sie es, jeder wird es sehen ... Oh, hören Sie mir zu, okay, ich werde die Steine später umwerfen ...
a und 1 sind beliebige Zeichen
Manche Leute fragen sich vielleicht, warum Sie diese Zeichen eingeben, um als Administrator einzutreten? ?
Tatsächlich werden diese Zeichen verwendet, um die SQL-Sprache in Ihrem Programm zu täuschen und erfolgreich einzugeben.
Wie Sie sehen können: Im Startprogramm SQL wird die Tabelle nach Datensätzen abgefragt, die die Bedingungen user= &user& und pass= &pass& erfüllen.
sql=select * from table where user= &user& and pass= &pass&
Nachdem ich den obigen Code eingegeben hatte, wurde daraus:
sql=select * from table where user= a or 1 = 1 and pass= a or 1 = 1
Werfen wir einen Blick darauf. Gibt es einen Grund, nicht teilzunehmen? ? Geben Sie mir zunächst einen Grund, nicht einzutreten!
Das obige USER PASS-Feld ist vom Typ „Zeichen“ und das Gleiche gilt, wenn es vom Typ „Numerisch“ ist!
Lösung:
1. Funktionssubstitutionsmethode:
Verwenden Sie REPLACE, um Sonderzeichen zu ersetzen, die im vom Benutzer eingegebenen Inhalt enthalten sind, um Kontrollzwecke zu erreichen! sql=select * from table where user= &replace(user, , )& and pass= &replace(pass, , )&
Diese Methode kann jeweils nur ein Zeichen ersetzen. Tatsächlich sollten nicht nur gefährliche Zeichen, sondern auch Zeichen wie >, <, &, % usw. kontrolliert werden. Aber was soll ich tun, wenn ich die REPLACE-Funktion scheinbar nicht nutzen kann? ?
2. Programmsteuerungsmethode
Verwenden Sie ein Programm, um alle vom Client eingegebenen Inhalte zu kontrollieren, sodass alle vom Benutzer eingegebenen möglichen gefährlichen Zeichen oder Codes vollständig kontrolliert werden können. Dies ist meine Methode!
<%
Erfassen Sie vom Benutzer übermittelte Formularinhalte
user=request.from(user)
pass=request.from(pass)
...
Die Schleifensteuerung beginnt
für i=1 bis len(user)
Verwenden Sie die MID-Funktion, um ein Zeichen an Position i in der Variablen user zu lesen
us=mid(user,i,1)
Vergleichen Sie gelesene Zeichen
wenn us= oder us=% oder us=< oder us=> oder us=& dann
Wenn es die oben genannten Zeichen enthält, wird eine Fehlermeldung angezeigt. Es darf die oben genannten Sonderzeichen nicht enthalten.
Response.redirect err2.htm
Antwort.Ende
Ende wenn
nächste
...
%>