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

Implementierung der Breakpoint-Wiederaufnahme in Node.js

Vorwort Normaler Geschäftsbedarf: Hochladen von B...

CSS3 realisiert Partikelanimationseffekte beim Matching von Königen

Beim Codieren werden Sie feststellen, dass viele ...

Detaillierte Erläuterung des Lazy Loading und Preloading von Webpack

Inhaltsverzeichnis Normale Belastung Lazy Loading...

Detaillierte Erläuterung der Konfiguration der Alibaba Cloud-Sicherheitsregeln

Vor zwei Tagen habe ich das Double 11-Shopping-Fe...

Was tun, wenn der von Docker Run gestartete Container hängt und Daten verliert?

Szenariobeschreibung In einem bestimmten System w...

MySQL-Methode zur Sperrensteuerung für Parallelität

Inhaltsverzeichnis Vorwort 1. Optimistisches Sper...

So stellen Sie ein Vue-Projekt unter Nginx bereit

Heute werde ich den Server nginx verwenden und mu...

So verbessern Sie die MySQL Limit-Abfrageleistung

Bei MySQL-Datenbankoperationen hoffen wir immer, ...

Erfahren Sie in fünf Minuten mehr über React Routing

Inhaltsverzeichnis Was ist Routing Grundlegende V...