Beispiel und Lösung für einen SQL-Injection-Sicherheitslückenprozess

Beispiel und Lösung für einen SQL-Injection-Sicherheitslückenprozess

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:
  • Die beste Lösung zur Verhinderung von SQL-Injection in PHP
  • Detaillierte Erklärung und Lösungen häufiger Sicherheitsprobleme bei der PHP-Entwicklung (wie SQL-Injection, CSRF, Xss, CC usw.)
  • T-SQL: So verhindern Sie SQL-Injection
  • Lösung zur Batch-Injektion einer ASP+MSSQL2000-Datenbank
  • MySQL-Proxy (eine andere Möglichkeit, das Injektionsproblem zu lösen)
  • Detaillierte Erläuterung alternativer Methoden zur Lösung von SQL-Injection in MySQL
  • Prinzipien der SQL-Injection und Lösungscodebeispiele
  • Lösen Sie SQL-Injection-Probleme mit ibatis
  • SQLServer-Datenbank-Injection-Lösung
  • SQL-Injection und wie man sie löst

<<:  Vue implementiert das Hoch- und Herunterladen von Dateien

>>:  Das Problem und die Lösung bei der Verwendung von Docker-Speicher und dem Verursachen von Exit, bei dem das Hochladen von Dateien auf den Server fehlschlägt

Artikel empfehlen

So integrieren Sie Bilder eleganter in Vue-Seiten

Inhaltsverzeichnis Fehlerdemonstration Durch bere...

Lösen Sie das Problem beim Laden der Vektorkartenquelle in OpenLayers 3

1. Vektorkarte Vektorgrafiken verwenden gerade Li...

Analyse der Linux-Bootsystemmethoden

Dieser Artikel beschreibt, wie man das Linux-Syst...

my.cnf-Parameterkonfiguration zur Optimierung der InnoDB-Engine-Leistung

Ich habe im Internet unzählige my.cnf-Konfigurati...

Installieren von MySQL 8.0.12 basierend auf Windows

Dieses Tutorial ist nur auf Windows-Systemen anwe...

Analyse und Praxis des serverseitigen Rendering-Prinzips von React

Die meisten Leute haben schon einmal vom Konzept ...

Einführung und Verwendungszusammenfassung der negativen Margenfunktion

Bereits in den CSS2-Empfehlungen von 1998 verschwa...

Detaillierte Einführung in das MySQL-Installationstutorial unter Windows

Inhaltsverzeichnis 1. Einige Konzepte, die Sie vo...

Installieren Sie Zookeeper unter Docker (Standalone und Cluster).

Nachdem wir Docker gestartet haben, schauen wir u...