Wie kann man Zeichenfolgen in SQL Server mit PHP maskieren?

In PHP kann man die Funktion sqlsrv_real_escape_string() verwenden, um Zeichenfolgen in SQL Server zu escapen. Diese Funktion nimmt zwei Parameter entgegen: die zu escapende Zeichenfolge und die Verbindungsressource. Beispielsweise:

<?php

// Dies ist eine Zeichenkettenvariable mit dem Wert "O'Reilly"
$string = "O'Reilly";

// Diese Zeile versucht, eine Verbindung zu einer Microsoft SQL Server-Datenbank mit der Funktion sqlsrv_connect herzustellen
// Die Funktion nimmt zwei Argumente an: den Servernamen und die Verbindungsinformationen
// Die Werte für `$serverName` und `$connectionInfo` sind jedoch in diesem Code nicht definiert, wodurch diese Zeile zu einem Fehler führen wird
$connection = sqlsrv_connect($serverName, $connectionInfo);

// Diese Zeile ruft die sqlsrv_real_escape_string-Funktion auf, die verwendet wird, um Sonderzeichen in einer Zeichenkette für die Verwendung in einer SQL-Abfrage zu maskieren
// Die Funktion nimmt zwei Argumente an: die zu maskierende Zeichenkette und die Datenbankverbindung
// In diesem Fall sind die Argumente `$string` und `$connection`
// Da die Werte für `$serverName` und `$connectionInfo` jedoch nicht definiert sind, wird der Aufruf von `sqlsrv_connect` zu einem Fehler führen
// Daher wird auch diese Zeile zu einem Fehler führen
$escapedString = sqlsrv_real_escape_string($string, $connection);

?>

Man kann dann die Variable $escapedString in der SQL-Abfrage verwenden.

Alternativ kann man auch die PDO-Bibliothek verwenden, die eine sichere Möglichkeit zur Verarbeitung von SQL-Injection bietet. Mit PDO kann man prepare und execute verwenden, um SQL-Injection zu vermeiden.

<?php

// Dies ist eine Zeichenkettenvariable mit dem Wert "O'Reilly"
$string = "O'Reilly";

// Diese Zeile erstellt eine neue Instanz der PDO-Klasse, die verwendet wird, um eine Verbindung zu einer Datenbank herzustellen
// Der PDO-Konstruktor nimmt vier Argumente an: den Datenquellen-Namen (DSN), den Benutzernamen, das Passwort und ein Array von Optionen
// In diesem Fall ist der DSN so aufgebaut, dass es die Variablen `$serverName` und `$dbName` enthält, die in diesem Code nicht definiert sind
// Daher wird diese Zeile zu einem Fehler führen
$pdo = new PDO("sqlsrv:Server=$serverName;Database=$dbName", $username, $password);

// Diese Zeile bereitet eine SQL-Anweisung mithilfe der `prepare`-Methode des PDO-Objekts vor
// Die Anweisung selektiert alle Spalten aus der Tabelle `mytable`, bei denen die Spalte `name` dem Wert der Variable `$string` entspricht
// Der Wert von `$string` wird mithilfe eines Platzhalters `:name` in der Anweisung gebunden
$stmt = $pdo->prepare("SELECT * FROM mytable WHERE name = :name");

// Diese Zeile führt die bereitete Anweisung mithilfe der `execute`-Methode aus
// Die `execute`-Methode nimmt ein Array von Werten entgegen, die an den Platzhaltern in der Anweisung gebunden werden
// In diesem Fall wird der Wert von `$string` an den Platzhalter `:name` gebunden
$stmt->execute([':name' => $string]);

?>

Es ist wichtig zu beachten, dass Benutzereingaben immer validiert und gereinigt werden sollten, bevor sie in einer Abfrage verwendet werden, um SQL-Injection zu vermeiden.