Codebeispiel: öffentliche Klasse JDBCDemo3 { öffentliche statische Leere demo3_1(){ boolean flag = login("aaa' OR ' ","1651561"); //Wenn der Benutzername bekannt ist, kann diese Methode verwendet werden, um sich erfolgreich anzumelden, ohne das Passwort zu kennen if (flag) { System.out.println("Anmeldung erfolgreich"); }anders{ System.out.println("Anmeldung fehlgeschlagen"); } } öffentliche statische Boolesche Anmeldung (String-Benutzername,String-Passwort) { Verbindung conn=null; Anweisung stat=null; Ergebnismenge rs=null; Boolesche Flagge=false; versuchen { conn = JDBCUtils.getConnection(); String sql="SELECT * FROM user WHERE username='"+username+"'AND password='"+password+"'"; //Dies ist der Schlüssel zur SQL-Injection-Sicherheitslücke. Da es sich um eine Zeichenfolgenverkettung handelt, lautet die Abfrageanweisung: SELECT * FROM user WHERE username='aaa' OR '' AND password='1651561'. Diese Abfrageanweisung kann einen Ergebnissatz abrufen, daher tritt diese Sicherheitslücke aufstat=conn.createStatement(); rs=stat.executeQuery(sql); wenn(rs.next()){ Flagge=wahr; }anders{ Flagge=falsch; } } Fang (SQLException e) { e.printStackTrace(); } Flagge zurückgeben; } Lösung, verwenden Sie PrepareStatement: öffentliche statische Leere demo3_1(){ Boolesche Flagge = login1 ("aaa' ODER ' ","1651561"); wenn (Flagge) { System.out.println("Anmeldung erfolgreich"); }anders{ System.out.println("Anmeldung fehlgeschlagen"); } } öffentliche statische Boolesche Anmeldung1 (String-Benutzername, String-Passwort) { Verbindung conn=null; Vorbereitete Anweisung pstat=null; Ergebnismenge rs=null; Boolesche Flagge=false; versuchen { conn = JDBCUtils.getConnection(); String sql="SELECT * FROM user WHERE username=? AND password=?"; //Verwenden Sie ? statt Parameter, voreingestelltes SQL-Format, selbst wenn Sie SQL-Schlüsselwörter eingeben, wird SQL es nicht erkennen pstat=conn.prepareStatement(sql); pstat.setString(1,username); //Wert des Fragezeichens festlegen pstat.setString(2,password); rs=pstat.executeQuery(); wenn(rs.next()){ Flagge=wahr; }anders{ Flagge=falsch; } } Fang (SQLException e) { e.printStackTrace(); } Flagge zurückgeben; } } Mit der obigen Lösung ist es unmöglich, den Benutzer über die SQL-Injection-Sicherheitslücke erfolgreich anzumelden. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Vue implementiert das Hoch- und Herunterladen von Dateien
Vorwort In MySQL verwenden sowohl Innodb als auch...
Inhaltsverzeichnis React-Native-Projektinitialisi...
Schauen wir uns die detaillierte Methode zum Erst...
Tomcat ist eine auf Java basierende Webserversoft...
In diesem Artikel wird der spezifische Code des h...
Vorne geschrieben In der Vergangenheit und in akt...
Inhaltsverzeichnis 1. Das einfachste Beispiel 2. ...
In diesem Artikelbeispiel wird der spezifische Co...
【Vorwort】 Ich möchte vor Kurzem das Prüfungssyste...
Dieses Mal werden wir versuchen, den laufenden Co...
Wenn Sie MySQL kennen, werden Sie feststellen, da...
Zusätzlich zu den B-Tree-Indizes bietet MySQL auc...
Zunächst einmal hängt die Gestaltung des Webseiten...
Inhaltsverzeichnis js aufrufende Methode Android ...
HTML implementiert ein 2-spaltiges Layout mit fes...