Heim >Backend-Entwicklung >PHP-Tutorial >Wie fügt man PHP-Variablen sicher in MySQL-Anweisungen ein, um SQL-Injection zu verhindern?

Wie fügt man PHP-Variablen sicher in MySQL-Anweisungen ein, um SQL-Injection zu verhindern?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-25 16:47:14869Durchsuche

How to Safely Insert PHP Variables into MySQL Statements to Prevent SQL Injection?

PHP-Variablen in MySQL-Anweisungen einfügen

Beim Einfügen von PHP-Variablen in MySQL-Anweisungen ist es wichtig, die Regeln zu verstehen, um die Datenintegrität sicherzustellen und zu verhindern potenzielle Sicherheitslücken.

1. Vorbereitete Anweisungen für Datenliterale verwenden

Was: Alle PHP-Variablen, die SQL-Datenliterale (Zeichenfolgen oder Zahlen) darstellen, müssen durch vorbereitete Anweisungen eingebunden werden.

Warum: Vorbereitete Anweisungen bereinigen und schützen Daten, indem sie SQL-Injection verhindern Angriffe.

Wie:

  • Ersetzen Sie Variablen durch Platzhalter in der SQL-Abfrage.
  • Bereiten Sie die Abfrage vor.
  • Binden Sie Variablen an Platzhalter.
  • Führen Sie die aus Abfrage.

Beispiel mit mysqli:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

Wie man PDO verwendet:

$type = 'testing';
$reporter = "John";
$sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

2. Whitelist-Filterung für Abfrageteile

Was: Variablen, die andere Abfrageteile (Schlüsselwörter, Bezeichner) darstellen, müssen durch eine „Whitelist“ zulässiger Werte gefiltert werden.

Warum:Um zu verhindern, dass böswillige Benutzer nicht autorisierte Abfrageteile einschleusen oder Schlüsselwörter.

Wie:

  • Erstellen Sie eine Liste zulässiger Werte.
  • Überprüfen Sie die Variable anhand der Liste, bevor Sie sie in die Abfrage aufnehmen .
  • Formatieren Sie Bezeichner gemäß der Datenbanksyntax (z. B. Backticks für MySQL).

Beispiel:

$orderby = $_GET['orderby'] ?: "name";
$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) {
    throw new InvalidArgumentException("Invalid field name");
}
$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

Das obige ist der detaillierte Inhalt vonWie fügt man PHP-Variablen sicher in MySQL-Anweisungen ein, um SQL-Injection zu verhindern?. 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