Heim >Datenbank >MySQL-Tutorial >Was ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut

Was ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut

php是最好的语言
php是最好的语言Original
2018-07-26 17:52:572807Durchsuche

SQL-Injection von Grund auf verstehen, was ist SQL-Injection? SQL-Injection bedeutet, dass ich der Einzige bin, der die Datenbank bedienen kann. Ich lasse Sie einfach den Inhalt eingeben und verlassen, aber Sie geben den Befehl ein und bedienen so die Datenbank ohne mein Wissen

SQL-Injection

1. Was ist SQL-Injection?

  • Sehen Sie sich das folgende Fallszenario an, das ein normales Anmeldeszenario ist:

Was ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut

  • Und wenn wir den Benutzernamen ': – verwenden, können wir uns erfolgreich anmelden, indem wir das Passwort eingeben ↓

Was ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut

  • Zu diesem Zeitpunkt können Sie beim Vergleich der beiden SQL feststellen, dass der Benutzer die interne SQL tatsächlich vorzeitig beendet hat, indem er das SQL-Symbol in den Benutzernamen geschrieben und kommentiert hat Geben Sie die Suchbedingungen in der zweiten Hälfte des Satzes ein, um den Problem-Login-Effekt zu vermeiden.

SQL-Injection bedeutet, dass ich der Einzige bin, der die Datenbank bedienen kann. Ursprünglich habe ich Sie nur den Inhalt eingeben und verlassen lassen, aber Sie geben den Befehl ein und führen ihn dadurch aus Die Datenbank ohne mein Wissen

2. Schwachstellenreparatur

  • Der Grund, warum das obige SQL dynamisches Spleißen verwendet, also die Art und Weise, wie das SQL im Mai übergeben wird Ändern Sie die Semantik von SQL.

Dynamisches Spleißen ist die gemischte Verwendung von Java-Variablen und SQL-Anweisungen in Java: select * from user where userName='"+userName+"' and password = '"+password " '

  • Verwenden Sie also die parametrisierte SQL von PreparedStatement. Indem Sie zuerst die Semantik bestimmen und dann die Parameter übergeben, wird die Semantik der SQL aufgrund der übergebenen Parameter nicht geändert . (Parameter über setInt, setString, setBoolean übergeben)

3. Parametrisierter SQL-Anwendungsfall

            //建立数据连接
            conn=ds.getConnection();
            //1.设置prepareStatement带占位符的sql语句
            PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?");
            ptmt.setString(1, "张三");      //2.设置参数
            ptmt.setString(2, "123456");
            rs=ptmt.executeQuery();     

            while(rs.next()){
                System.out.println("登陆成功");
                return;
            }
            System.out.println("登陆失败");

Parametrierte Funktionen:

1. Festlegen der SQL-Anweisung von PreparedStatement mit Platzhalter

Art und Weise der Ausführung der SQL-Anweisung:

stmt=conn.createStatement();
rs=stmt.executeQuery("select userName from user");

2. Parameter festlegen

PerparedStatement erbt von Statement, und hier werden hauptsächlich die Funktionen verwendet, die es zur parametrisierten SQL machen.

Umgeleitet: https://blog.csdn.net/qq_30258957/article/details/78145885

Hinzugefügt: 1. PreparedStatement erweitert Statement;

2. Statement eignet sich zum Ausführen von statischem (bedingungslosem) SQL und PreparedStatement eignet sich zum Ausführen von dynamischem (bedingtem) SQL;

3.PreparedStatement kann Injektionsangriffe vermeiden;

Verwandte Artikel:

Eine PHP-Anti-SQL-Injection, die ich für sehr sicher halte, muss geknackt werden

Umfassendes Verständnis der SQL-Injection und vorbeugender Maßnahmen

Verwandte Videos:

Verteidigung von SQL-Injection-PHP Praktisches Mall-Entwicklungsvideo-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist SQL-Injection? Machen Sie sich mit der SQL-Injection von Grund auf vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn