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:
<input type="text" name="UserID" size="25" maxlength="20">
Passwort:
<input type="text" name="Pass" size="12" maxlength="20">
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
SUB.asp-Programm
<%
Daten vom Formular empfangen
user=request.from("BenutzerID")
Ü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.open sql
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.
Response.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 beim Administrator anmelden möchte, kann ich ihn in das Eingabefeld des SUb.htm-Formulars eingeben:
Geben Sie in das erste Textfeld Folgendes ein: a oder 1 = 1 oder ODER =
Geben Sie in das zweite Textfeld ein: a oder 1 = 1 oder ODER =
Senden, jeder wird sehen... „Oh, hör mir zu, okay, ich werfe die Steine später um…“
„a“ und „1“ sind beliebige Zeichen.
Manche Leute fragen sich vielleicht, warum Sie als Administrator eingeben, wenn Sie diese Zeichen eingeben. ?
Tatsächlich sind diese Zeichen eine Täuschung der SQL-Sprache in Ihrem Programm. Für diejenigen, die erfolgreich eingegeben haben,
lesen Sie bitte: Beim Starten des Programms SQL wird die Tabelle nach Datensätzen abgefragt, die den Anforderungen user= „&user&“ und pass= „ entsprechen. &pass&" "conditions
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 oder 1 = 1 "
Mal sehen, gibt es einen Grund, nicht einzutreten? ? Geben Sie mir einen Grund, nicht einzutreten!
Das Gleiche gilt, wenn das obige USER PASS-Feld numerisch ist!
Lösung:
1.
Verwenden Sie REPLACE, um Sonderzeichen zu ersetzen in den vom Benutzer eingegebenen Inhalt, 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 sind die gefährlichen Zeichen nicht nur " ", sondern auch Zeichen wie ">", "<", "&", "%" usw sollte vollständig kontrolliert werden. Was soll ich aber tun, wenn die REPLACE-Funktion nicht geeignet
ist
? vollständig kontrolliert werden, das 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
...
%>