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
Es gibt zwei Arten von HTML-Tags: Inline-Elemente...
Die folgenden Schritte werden alle auf meiner vir...
Verwenden Sie Metadaten, um eine zeitgesteuerte A...
Inhaltsverzeichnis 1. Wie wird die aktuelle Uhrze...
Wenn Sie mit der Arbeit an einem Projekt beginnen...
Es gibt drei Hauptmethoden der MySQL-Replikation:...
Vorwort Ich glaube, dass die Syntax von MySQL nic...
Wir wissen, dass die in JS am häufigsten verwende...
Vorschlag: Das möglichst häufige handschriftliche ...
Inhaltsverzeichnis 1. Übersicht 1. Grundsatz 2. U...
Ich habe lange mit einem Problem gekämpft und das...
Es ist sehr mühsam, eine virtuelle Maschine einzu...
Spiegel finden Wir können auf der Docker Hub-Webs...
Nachdem ich diese sechs Artikel geschrieben hatte,...
Inhaltsverzeichnis Index - Allgemeiner Index - Ei...