Schutz Ihrer Datenbank: Richtige Verwendung von LIKE '%{$var}%' in vorbereiteten Anweisungen
Der Aufbau dynamischer Suchfunktionen, die auf Benutzereingaben reagieren, erfordert sorgfältige Überlegungen zur Sicherheit. Ein häufiges Szenario besteht in der Suche nach Benutzernamen, die eine teilweise Übereinstimmung enthalten, mithilfe des MySQL-Operators LIKE
. Allerdings ist die direkte Einbindung von Benutzereingaben in eine LIKE
-Klausel innerhalb einer vorbereiteten Anweisung anfällig für SQL-Injection-Schwachstellen.
Bei falschen Ansätzen wird häufig versucht, Platzhalter in die Platzhalterzeichen LIKE
einzubetten, z. B. SELECT * FROM users WHERE username LIKE '%{?}%'
. Dies ist fehlerhaft, da die Platzhaltersyntax vom Datenbanktreiber nicht korrekt interpretiert wird.
Der Schlüssel zur sicheren Implementierung liegt in der Konstruktion des LIKE
Ausdrucks vor der Vorbereitung der Anweisung. Dadurch wird sichergestellt, dass die Benutzereingaben ordnungsgemäß bereinigt und als Daten und nicht als ausführbarer Code behandelt werden. Hier ist die richtige Methode:
<code class="language-php">$searchParam = "%" . $yourParam . "%"; // Prepend and append wildcards $stmt = $mysqli->prepare("SELECT * FROM REGISTRY WHERE name LIKE ?"); $stmt->bind_param("s", $searchParam); // Bind the complete LIKE expression $stmt->execute();</code>
In diesem verbesserten Beispiel werden die %
-Platzhalter zu den vom Benutzer bereitgestellten $yourParam
hinzugefügt, um das vollständige LIKE
-Muster zu erstellen, das in $searchParam
gespeichert ist. Dieses vollständige Muster wird dann mithilfe von bind_param
mit dem Zeichenfolgentyp („s“) an den Platzhalter der vorbereiteten Anweisung gebunden. Dies verhindert SQL-Injection und behält gleichzeitig die dynamische Suchfunktion bei. Dieser Ansatz gewährleistet sowohl die Sicherheit als auch die Effizienz vorbereiteter Abrechnungen.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQLs LIKE '%{$var}%' sicher mit vorbereiteten Anweisungen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!