Heim > Datenbank > MySQL-Tutorial > Ein Artikel, der analysiert, warum SQL-parametrisierte Abfragen die SQL-Injection verhindern können

Ein Artikel, der analysiert, warum SQL-parametrisierte Abfragen die SQL-Injection verhindern können

藏色散人
Freigeben: 2023-03-17 16:09:44
nach vorne
2110 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL. Er befasst sich hauptsächlich mit der Frage, warum SQL-Parametrierungsabfragen die SQL-Injection verhindern können. Ich hoffe, dass er für alle hilfreich ist.

Ein Artikel, der analysiert, warum SQL-parametrisierte Abfragen die SQL-Injection verhindern können

Warum können SQL-parametrisierte Abfragen SQL-Injection verhindern?

1. Was ist SQL-Injection?

Fügen Sie SQL-Befehle in die Abfragezeichenfolge der Formularübermittlung oder der Eingabe des Domänennamens oder der Seitenanforderung ein und verleiten Sie so den Server zur Ausführung schädlicher SQL-Befehle.

 -- 正常的查询语句
 select * from users where username = 'a';

 -- 恶意的查询语句
 select * from users where username = 'a' or 1==1;
Nach dem Login kopieren

2. Was ist eine parametrisierte Abfrage?

Parameterisierte Abfrage bedeutet, dass beim Abfragen der Datenbank Parameter verwendet werden, um Werte anzugeben, bei denen Daten ausgefüllt werden müssen.

set @id = 1;
SELECT * from users WHERE id = @id ;
Nach dem Login kopieren

3. Ausführungsverarbeitung von SQL-Anweisungen

Je nach Verarbeitungsablauf gibt es zwei Arten von SQL-Anweisungen: Echtzeit-SQL und vorverarbeitetes SQL.

  • Instant SQL

Instant SQL wird von der Datenbank empfangen und nach der endgültigen Ausführung zurückgegeben. Der allgemeine Prozess ist wie folgt:

  a. 词法和语义解析
  b. 优化sql语句,制定执行计划
  c. 执行并返回结果
Nach dem Login kopieren

Funktionen: Einmal kompilieren, einmal ausführen.

  • Vorverarbeitung von SQL

Eine bestimmte SQL im Programm kann wiederholt aufgerufen werden, oder nur einzelne Werte können bei jeder Ausführung unterschiedlich sein. Wenn Sie sich jedes Mal den Echtzeit-SQL-Prozess ansehen, ist die Effizienz relativ gering.

Zu diesem Zeitpunkt können Sie die Werte in SQL durch Platzhalter ersetzen und dann die Parameter binden. Wenn Sie die Anweisung wiederholt ausführen, müssen Sie nur die Parameter ersetzen, ohne eine lexikalische und semantische Analyse durchzuführen . Kann als SQL-Anweisung mit Vorlage oder parametrisiert betrachtet werden.

Funktionen: Einmal kompilieren und mehrmals ausführen, wodurch mehrfaches Parsen und andere Prozesse entfallen. (Mehrere Ausführungen bedeuten, dass dieselbe Anweisung in derselben Sitzung erneut ausgeführt wird, sodass sie nicht erneut analysiert und kompiliert wird.)

  -- 语法
  # 定义预处理语句
  PREPARE stmt_name FROM preparable_stmt;
  # 执行预处理语句
  EXECUTE stmt_name [USING @var_name [, @var_name] ...];
  # 删除(释放)定义
  {DROP | DEALLOCATE} PREPARE stmt_name;
Nach dem Login kopieren

4 Wie verhindert die Vorverarbeitung von SQL die SQL-Injection? Das auszuführende SQL wird dann kompiliert Im Cache-Pool gespeichert, wird DB nicht erneut kompiliert, sondern die SQL-Vorlage finden, die Parameter an sie übergeben und sie dann ausführen. Daher werden Befehle ähnlich wie oder 1==1 als Parameter übergeben und nicht semantisch analysiert und ausgeführt.

 -- 预处理编译 SQL ,会占用资源
 PREPARE stmt1 from 'SELECT COUNT(*) FROM users WHERE PASSWORD = ? AND user_name = ?';

 set [@a](https://learnku.com/users/16347) = 'name1 OR 1 = 1';
 set @b = 'pwd1';

 EXECUTE stmt1 USING @b,[@a](https://learnku.com/users/16347);

 -- 使用 DEALLOCATE PREPARE 释放资源
 DEALLOCATE PREPARE stmt1;
Nach dem Login kopieren
Empfohlenes Lernen: „

MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEin Artikel, der analysiert, warum SQL-parametrisierte Abfragen die SQL-Injection verhindern können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage