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
Inhaltsverzeichnis Fehlerdemonstration Durch bere...
Inhaltsverzeichnis Array-Deduplizierung 1 Doppels...
1. Vektorkarte Vektorgrafiken verwenden gerade Li...
1. Zusätzlich zum Standardport 8080 versuchen wir...
Wir alle wissen, dass die Leistung von Anwendunge...
<br />Verwandte Artikel: 9 praktische Vorsch...
Dieser Artikel beschreibt, wie man das Linux-Syst...
Ich habe im Internet unzählige my.cnf-Konfigurati...
Dieses Tutorial ist nur auf Windows-Systemen anwe...
Die meisten Leute haben schon einmal vom Konzept ...
Im Frontend-Designentwurf sieht man oft Schließen...
Bereits in den CSS2-Empfehlungen von 1998 verschwa...
HTML5 und jQuery implementieren die Vorschau loka...
Inhaltsverzeichnis 1. Einige Konzepte, die Sie vo...
Nachdem wir Docker gestartet haben, schauen wir u...