Start · Sprachen · PHP · Referenz · odbc_connection_string_quote

odbc_connection_string_quote

Funktion

Maskiert einen Wert für die sichere Verwendung in einer ODBC-Verbindungszeichenkette.

seit PHP 8.2.0 Kategorie: db

Signatur

odbc_connection_string_quote(string $str): string

Beschreibung

odbc_connection_string_quote() umschließt den übergebenen Zeichenkettenwert mit geschweiften Klammern und maskiert dabei intern vorhandene schließende geschweifte Klammern (}), sodass der Wert sicher als Bestandteil einer ODBC-Verbindungszeichenkette verwendet werden kann. Dies ist notwendig, weil ODBC-Verbindungszeichenketten ein spezielles Format verwenden, in dem Sonderzeichen zu Problemen führen können.

Die Funktion ist besonders dann wichtig, wenn Verbindungsparameter wie Passwörter, Servernamen oder andere Konfigurationswerte dynamisch aus Benutzereingaben oder externen Quellen stammen. Ohne korrekte Maskierung könnten solche Werte die Struktur der Verbindungszeichenkette brechen oder zu unerwarteten Verbindungszielen führen.

Das ODBC-Format für Verbindungszeichenketten sieht vor, dass Werte, die Sonderzeichen enthalten, in geschweifte Klammern eingeschlossen werden. Ein enthaltenes }-Zeichen muss dabei als }} verdoppelt werden. odbc_connection_string_quote() erledigt genau diese Escaping-Logik automatisch.

Zusammen mit odbc_connection_string_is_quoted() kann geprüft werden, ob ein Wert bereits korrekt gequotet ist, bevor er erneut maskiert wird.

Parameter

Name Typ Default Beschreibung
$str Pflicht string Der zu maskierende Wert, der als Teil einer ODBC-Verbindungszeichenkette verwendet werden soll (z. B. ein Passwort oder ein Datenbankname).

Rückgabewert

Typ
string
Beschreibung
Den übergebenen Wert in geschweifte Klammern eingeschlossen, wobei alle intern vorhandenen }-Zeichen zu }} verdoppelt wurden. Der Rückgabewert ist immer ein gültiger, maskierter ODBC-Verbindungszeichenkettenwert.

Beispiele

Einfaches Quoten eines Passworts

<?php
$password = 'geheim123';
$quoted = odbc_connection_string_quote($password);
echo $quoted;
// Ausgabe: {geheim123}

$dsn = 'Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=mydb;PWD=' . $quoted . ';';
echo $dsn;
{geheim123} Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=mydb;PWD={geheim123};

Passwort mit geschweiften Klammern sicher maskieren

<?php
// Passwort enthält eine schließende geschweifte Klammer
$password = 'pa$$w}rd!{}';
$quoted = odbc_connection_string_quote($password);
echo $quoted;
// Innere } werden zu }}, das Ergebnis wird in {} eingeschlossen

$dsn = 'Driver={SQL Server};Server=db.example.com;PWD=' . $quoted . ';';
echo PHP_EOL . $dsn;
{pa$$w}}rd!{}} Driver={SQL Server};Server=db.example.com;PWD={pa$$w}}rd!{}};

Kombination mit odbc_connection_string_is_quoted()

<?php
$value = 'mein{Wert}';

if (!odbc_connection_string_is_quoted($value)) {
    $value = odbc_connection_string_quote($value);
}

echo $value;
{mein{Wert}}}

// Wichtig · Fallstricke

Sicherheitshinweis: Werden Verbindungszeichenketten dynamisch aus Benutzereingaben oder Konfigurationsdateien zusammengebaut, sollte odbc_connection_string_quote() für jeden Wert verwendet werden, der potenziell Sonderzeichen enthalten kann. Das Auslassen dieser Maskierung kann dazu führen, dass ein Angreifer durch speziell präparierte Eingaben die Verbindungszeichenkette manipuliert und sich z. B. mit anderen Zugangsdaten verbindet (Connection-String-Injection).

Die Funktion wurde mit PHP 8.2.0 eingeführt. In älteren PHP-Versionen muss die Maskierung manuell implementiert werden: Wert in {} einschließen und alle } zu }} verdoppeln.

Bereits korrekt gequotete Werte (d. h. Werte, die mit { beginnen) sollten nicht erneut gequotet werden, da sonst eine doppelte Maskierung entsteht. Nutze odbc_connection_string_is_quoted() zur Überprüfung.