SQL-Injection von Grund auf verstehen, was ist SQL-Injection? SQL-Injection bedeutet, dass ich der Einzige bin, der die Datenbank bedienen kann. Ich lasse Sie einfach den Inhalt eingeben und verlassen, aber Sie geben den Befehl ein und bedienen so die Datenbank ohne mein Wissen
Sehen Sie sich das folgende Fallszenario an, das ein normales Anmeldeszenario ist:
Und wenn wir den Benutzernamen ': – verwenden, können wir uns erfolgreich anmelden, indem wir das Passwort eingeben ↓
Zu diesem Zeitpunkt können Sie beim Vergleich der beiden SQL feststellen, dass der Benutzer die interne SQL tatsächlich vorzeitig beendet hat, indem er das SQL-Symbol in den Benutzernamen geschrieben und kommentiert hat Geben Sie die Suchbedingungen in der zweiten Hälfte des Satzes ein, um den Problem-Login-Effekt zu vermeiden.
SQL-Injection bedeutet, dass ich der Einzige bin, der die Datenbank bedienen kann. Ursprünglich habe ich Sie nur den Inhalt eingeben und verlassen lassen, aber Sie geben den Befehl ein und führen ihn dadurch aus Die Datenbank ohne mein Wissen
Der Grund, warum das obige SQL dynamisches Spleißen verwendet, also die Art und Weise, wie das SQL im Mai übergeben wird Ändern Sie die Semantik von SQL.
Dynamisches Spleißen ist die gemischte Verwendung von Java-Variablen und SQL-Anweisungen in Java: select * from user where userName='"+userName+"' and password = '"+password " '
Verwenden Sie also die parametrisierte SQL von PreparedStatement. Indem Sie zuerst die Semantik bestimmen und dann die Parameter übergeben, wird die Semantik der SQL aufgrund der übergebenen Parameter nicht geändert . (Parameter über setInt, setString, setBoolean übergeben)
//建立数据连接 conn=ds.getConnection(); //1.设置prepareStatement带占位符的sql语句 PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?"); ptmt.setString(1, "张三"); //2.设置参数 ptmt.setString(2, "123456"); rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("登陆成功"); return; } System.out.println("登陆失败");
Parametrierte Funktionen:
1. Festlegen der SQL-Anweisung von PreparedStatement mit Platzhalter
Art und Weise der Ausführung der SQL-Anweisung:
stmt=conn.createStatement(); rs=stmt.executeQuery("select userName from user");
2. Parameter festlegen
PerparedStatement erbt von Statement, und hier werden hauptsächlich die Funktionen verwendet, die es zur parametrisierten SQL machen.
Umgeleitet: https://blog.csdn.net/qq_30258957/article/details/78145885
Hinzugefügt: 1. PreparedStatement erweitert Statement;
2. Statement eignet sich zum Ausführen von statischem (bedingungslosem) SQL und PreparedStatement eignet sich zum Ausführen von dynamischem (bedingtem) SQL;
3.PreparedStatement kann Injektionsangriffe vermeiden;
Verwandte Artikel:
Eine PHP-Anti-SQL-Injection, die ich für sehr sicher halte, muss geknackt werden
Umfassendes Verständnis der SQL-Injection und vorbeugender Maßnahmen
Verwandte Videos:
Verteidigung von SQL-Injection-PHP Praktisches Mall-Entwicklungsvideo-Tutorial
Das obige ist der detaillierte Inhalt vonWas ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!