Heim > Backend-Entwicklung > PHP-Tutorial > Wie können vorbereitete Anweisungen SQL-Injection-Angriffe in PHP-Anwendungen verhindern?

Wie können vorbereitete Anweisungen SQL-Injection-Angriffe in PHP-Anwendungen verhindern?

DDD
Freigeben: 2024-12-21 16:46:10
Original
680 Leute haben es durchsucht

How Can Prepared Statements Prevent SQL Injection Attacks in PHP Applications?

SQL-Injection-Angriffe in PHP verhindern

In Webanwendungen können Benutzereingaben oft zu Schwachstellen wie SQL-Injection führen, wenn sie nicht behandelt werden richtig. SQL-Injection tritt auf, wenn vom Benutzer bereitgestellte Daten ohne ordnungsgemäße Validierung oder Bereinigung direkt in SQL-Anweisungen enthalten sind.

Das Problem

Bedenken Sie den folgenden PHP-Codeausschnitt:

$unsafe_variable = $_POST['user_input'];

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Nach dem Login kopieren

Wenn ein Benutzer bösartige Daten wie einen Wert eingibt'); DROP TABLE-Tabelle;--, die SQL-Abfrage lautet:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Nach dem Login kopieren

Dies würde dazu führen, dass der böswillige Benutzer die gesamte Tabelle aus der Datenbank löscht.

Lösung: Vorbereitete Anweisungen und Parametrisierung

Die empfohlene Lösung zur Verhinderung von SQL-Injections besteht darin, Daten von SQL zu trennen, indem vorbereitete Anweisungen und parametrisierte Abfragen verwendet werden. Dadurch wird sichergestellt, dass Benutzereingaben als Daten und nicht als ausführbare Befehle behandelt werden.

Verwendung von PDO

PDO bietet eine konsistente und universelle Schnittstelle zu verschiedenen Datenbanktreibern. So verwenden Sie vorbereitete Anweisungen mit PDO:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(['name' => $name]);

foreach ($stmt as $row) {
    // Do something with $row
}
Nach dem Login kopieren

Verwendung von MySQLi

Speziell für MySQL bietet MySQLi die Methodeexecute_query() in PHP 8.2:

$result = $db->execute_query('SELECT * FROM employees WHERE name = ?', [$name]);
while ($row = $result->fetch_assoc()) {
     // Do something with $row
 }
Nach dem Login kopieren

Oder in PHP-Versionen vor 8.2:

$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); // 's' specifies the variable type as string
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
     // Do something with $row
 }
Nach dem Login kopieren

Für Weitere Informationen zu anderen Datenbanktreibern finden Sie in der entsprechenden Dokumentation.

Korrekte Verbindungseinrichtung

Um echten Schutz zu gewährleisten, ist es wichtig, die Datenbankverbindung richtig zu konfigurieren:

PDO

Emuliert vorbereitet deaktivieren Anweisungen:

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Nach dem Login kopieren

MySQLi

Fehlermeldung aktivieren und Zeichensatz festlegen:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$dbConnection = new mysqli('127.0.0.1', 'username', 'password', 'test');
$dbConnection->set_charset('utf8mb4');
Nach dem Login kopieren

Erklärung

Vorbereitete Anweisungen werden vom Datenbankserver analysiert und kompiliert, während Parameter als separate Werte behandelt werden. Dadurch wird verhindert, dass böswillige Eingaben als Befehle interpretiert werden.

Fazit

Durch den Einsatz vorbereiteter Anweisungen und Parametrisierung können Sie Ihre PHP-Webanwendungen effektiv vor SQL-Injection-Angriffen schützen und warten Datenintegrität.

Das obige ist der detaillierte Inhalt vonWie können vorbereitete Anweisungen SQL-Injection-Angriffe in PHP-Anwendungen 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage