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

Welche Vorteile bietet die Verwendung eines B+-Baums als Indexstruktur in MySQL?

Vorwort In MySQL verwenden sowohl Innodb als auch...

Detaillierter Prozess zum Erstellen von MongoDB und MySQL mit Docker-Compose

Schauen wir uns die detaillierte Methode zum Erst...

Centos7.5 Konfiguration Java-Umgebung Installation Tomcat Erklärung

Tomcat ist eine auf Java basierende Webserversoft...

Vue3.0 handgeschriebener Karusselleffekt

In diesem Artikel wird der spezifische Code des h...

Diagramm des Installations- und Verwendungstutorials für MySQL 8.0.17

Vorne geschrieben In der Vergangenheit und in akt...

So bringen Sie Ihren Browser dazu, mit JavaScript zu sprechen

Inhaltsverzeichnis 1. Das einfachste Beispiel 2. ...

JS+CSS zur Realisierung einer dynamischen Uhr

In diesem Artikelbeispiel wird der spezifische Co...

So verwenden Sie xshell zum Herstellen einer Verbindung zu Linux in VMware (2 Methoden)

【Vorwort】 Ich möchte vor Kurzem das Prüfungssyste...

MySQL-Interviewfragen: So richten Sie Hash-Indizes ein

Zusätzlich zu den B-Tree-Indizes bietet MySQL auc...

Professionelles und nicht-professionelles Webdesign

Zunächst einmal hängt die Gestaltung des Webseiten...

Lernen Sie den Funktionsmechanismus von jsBridge in einem Artikel kennen

Inhaltsverzeichnis js aufrufende Methode Android ...