Heim > Datenbank > MySQL-Tutorial > Wie können erstellte Anweisungen und parametrisierte Abfragen die SQL -Injektion in PHP verhindern?

Wie können erstellte Anweisungen und parametrisierte Abfragen die SQL -Injektion in PHP verhindern?

Patricia Arquette
Freigeben: 2025-01-25 22:07:12
Original
158 Leute haben es durchsucht

How Can Prepared Statements and Parameterized Queries Prevent SQL Injection in PHP?

im PHP verhindern, dass SQL

injiziert Wenn die Benutzereingabe nicht korrekt verarbeitet wird und sie in die SQL -Abfrage einfügt, werden SQL -Injektionsanfälligkeiten erzeugt. Um dieses Risiko zu verstehen, betrachten Sie bitte das folgende Beispiel:

In dieser Szene wird die Abfrage:
<code class="language-php">$unsafe_variable = $_POST['user_input'];

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");</code>
Nach dem Login kopieren
, wenn der Benutzer den Wert von

böswillig eingibt: value'); DROP TABLE table;--

<code class="language-sql">INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')</code>
Nach dem Login kopieren
Dies öffnete die Tür für den böswilligen Angriff auf die Datenbank.

Technologie entlasten:

Unabhängig davon, in welcher Datenbank die empfohlene Sicherheitspraxis von SQL injiziert wird, besteht darin, Daten von SQL zu trennen. Dies bedeutet, dass Daten als Daten betrachtet werden und niemals von SQL Parser als Befehl interpretiert werden. Der effektivste Weg, um dieses Ziel zu erreichen, besteht darin, Vorbereitungsanweisungen und parametrisierte Abfragen zu verwenden.

Vorverarbeitungsanweisung und Parametrisierungsabfrage:

Vorbereitungsanweisungen umfasst das Senden von SQL -Abfragen und -Parametern an den Datenbankserver, sodass die Datenbank ihre Kombination verarbeiten kann. Dies stellt sicher, dass die Daten vor der Übertragung nicht zur Verhinderung einer schädlichen SQL -Injektion verhindern werden.

Implementierungsoptionen:

Es gibt zwei Hauptmethoden zum Erreichen von Aussagen vor der Verarbeitung:

PDO (PHP -Datenobjekt):

  1. Dies ist eine gemeinsame Methode, die für alle unterstützenden Datenbanktreiber geeignet ist. Das Folgende ist das Beispiel seiner Verwendung:

    mysqli (mySQL verbesserte Erweiterung):

    <code class="language-php">$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    $stmt->execute([ 'name' => $name ]);
    
    foreach ($stmt as $row) {
        // 处理行
    }</code>
    Nach dem Login kopieren
  2. Für die MySQL -Datenbank können Sie MySQLI verwenden. Ab PHP 8.2 können Sie die Methode
  3. verwenden, um Parameter zu erstellen, zu binden und SQL -Anweisungen in einem Schritt auszuführen:

    für PHP 8.1 und unterhalb der Versionen:

    execute_query()

    <code class="language-php">$result = $db->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);
    while ($row = $result->fetch_assoc()) {
        // 处理行
    }</code>
    Nach dem Login kopieren
    Wenn Sie andere Datenbanken als MySQL verwenden, gibt es Alternativen für den Treiber, wie

    und

    von PostgreSQL.
    <code class="language-php">$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?');
    $stmt->bind_param('s', $name); // 's' 表示'字符串'变量类型
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        // 处理行
    }</code>
    Nach dem Login kopieren
  4. Die richtigen Verbindungseinstellungen:

pg_prepare() Bei der Herstellung einer Verbindung ist es wichtig, die Simulation von vorverarbeiteten Sätzen zu deaktivieren, um Leistung und Sicherheit zu verbessern. pg_execute()

PDO -Verbindung:

mysqli Verbindung:

Schlussfolgerung:

<code class="language-php">$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8mb4', 'user', 'password');

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);</code>
Nach dem Login kopieren
Durch Erreichen von Vorbearbeitungsanweisungen und korrekten Einstellen von Verbindungen können Sie SQL effektiv daran hindern, Angriffe zu injizieren und die Sicherheit und Integrität von Datenbankanwendungen sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie können erstellte Anweisungen und parametrisierte Abfragen die SQL -Injektion in PHP verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage