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 Normaler Geschäftsbedarf: Hochladen von B...
Beim Codieren werden Sie feststellen, dass viele ...
Vorwort Da für den Upload des Miniprogramms https...
Inhaltsverzeichnis Normale Belastung Lazy Loading...
Wenn nginx eine Anfrage empfängt, gleicht es zunä...
Vor zwei Tagen habe ich das Double 11-Shopping-Fe...
Szenariobeschreibung In einem bestimmten System w...
Streng geprüfte Attribute Das offizielle Dokument...
Inhaltsverzeichnis Abhängigkeiten installieren Bo...
Inhaltsverzeichnis Vorwort 1. Optimistisches Sper...
Heute werde ich den Server nginx verwenden und mu...
Bei MySQL-Datenbankoperationen hoffen wir immer, ...
Inhaltsverzeichnis MutationObserver API Merkmale ...
Was wäre, wenn Ihre Designer die folgende Schrift...
Inhaltsverzeichnis Was ist Routing Grundlegende V...