SQL-Injection-Angriffe werden durch Unvollkommenheiten in unseren Programmanweisungen verursacht. Schauen wir uns an, wie wir die Instr-Funktion in ASP verwenden, um SQL-Injection-Angriffe wirksam zu verhindern. Das Besondere sollte so sein.
Wenn instr(Request(id), )>0 oder instr(Request(id),')>0 dann Response.redirect index.htm
Natürlich können Sie danach auch schreiben, was Sie wollen!
Lassen Sie uns zunächst die Instr-Funktion lernen:
Grammatik
InStr([start, ]string1, string2[, vergleichen])
Die Syntax der InStr-Funktion hat die folgenden Parameter:
Parameterbeschreibung
Start ist optional. Numerischer Ausdruck, der die Startposition für jede Suche festlegt. Wenn es weggelassen wird, beginnt die Suche an der ersten Zeichenposition. Wenn start Null enthält, tritt ein Fehler auf. Wenn Vergleich angegeben ist, ist der Startparameter erforderlich.
String1 ist erforderlich. Akzeptiert einen Zeichenfolgenausdruck, nach dem gesucht werden soll.
String2
Erforderlich. Der zu suchende Zeichenfolgenausdruck.
Vergleichen ist optional. Ein numerischer Wert, der den Vergleichstyp angibt, der bei der Auswertung von Teilzeichenfolgen verwendet wird. Zahlenwerte finden Sie im Abschnitt „Einstellungen“. Wenn es weggelassen wird, wird ein binärer Vergleich durchgeführt.
Der Vergleichsparameter kann folgende Werte annehmen:
Beschreibung des konstanten Werts
vbBinaryCompare 0 Führt einen binären Vergleich durch.
vbTextCompare 1 Führt einen Textvergleich durch.
[Rückgabewert]
Die InStr-Funktion gibt die folgenden Werte zurück:
Wenn InStr zurückkehrt
string1 hat die Länge Null und die Länge 0
string1 ist Null Null
string2 hat eine Anfangslänge von Null
string2 ist Null Null
string2 nicht gefunden 0
Finden Sie string2 in string1. Finden Sie die Position der passenden Zeichenfolge
start > Len(string2) 0
Das folgende Beispiel verwendet die InStr-Suchzeichenfolge:
Dimmen Sie SearchString, SearchChar, MyPos
SearchString =XXpXXpXXPXXP ' Die Zeichenfolge, nach der gesucht werden soll.
SearchChar = P ' Suche nach P.
MyPos = Instr(4, SearchString, SearchChar, 1) 'Der Textvergleich gibt 6 zurück, beginnend mit dem vierten Zeichen.
MyPos = Instr(1, SearchString, SearchChar, 0) 'Binärer Vergleich gibt 9 zurück, beginnend mit dem 1. Zeichen.
MyPos = Instr(SearchString, SearchChar) ' Rückgabe 9.
' Standardmäßig ist der binäre Vergleich (letztes Argument weggelassen).
MyPos = Instr(1, SearchString, W) 'Binärer Vergleich gibt 0 zurück, beginnend mit Zeichen 1 (W nicht gefunden).
Beachten Sie, dass die InStrB-Funktion die in der Zeichenfolge enthaltenen Bytedaten verwendet. Daher gibt InStrB nicht die Zeichenposition des ersten Vorkommens einer Zeichenfolge in einer anderen Zeichenfolge zurück, sondern die Byteposition.
Zusammenfassung: Die Funktion von instr ist: Gibt die Position des ersten Vorkommens eines Zeichens oder einer Zeichenfolge in einer anderen Zeichenfolge zurück. Schauen wir uns nun an, welcher Code:
wenn instr(Request(id), )>0 oder instr(Request(id),')>0 dann
Bedeutung: Vergleichen Sie die spezifischen Positionen von Zeichen (Leerzeichen) und Zeichen (') in der Anfrage (id) (binärer Vergleich). Wenn (Leerzeichen) und (') Zeichen gefunden werden, dann ist es die Anweisung danach!
Jetzt versteht jeder die Bedeutung!
Als ich es zum ersten Mal sah, sagte ich: Was ist, wenn es in ASP ist? Ist es nicht ein Fehler, beim Hinzufügen von Zeichen (; oder,) und anderen Zeichen zu Id=90 einen Fehler zu machen? (Ja, die Antwort ist ja:)
Vielleicht hat jemand anders gesagt, dann füge ich einige Zeichen in die if instr(Request(id), )>0 oder instr(Request(id),')>0 then-Anweisung ein, zum Beispiel ändere es in: if instr(Request (id ), )>0 oder instr(Request(id),')>0 oder instr(Request(id),;)>0 oder instr(Request(id),, )>0 dann
Warte, du kannst es später hinzufügen, haha! (Das ist gut! Aber es ist noch schlimmer :)
Ja, wenn man das hinzufügt, kann es tatsächlich einige sogenannte Hacker besiegen!
Tatsächlich ist es nicht notwendig. Haben Sie den Satz instr(Request(id), )>0 vergessen? Er hat ihn sogar mit (space) verglichen! Wäre es für die sogenannten Hacker nicht sinnlos, zu sagen: „1 = 1“, solange es diesen Satz gibt?