Heim >Backend-Entwicklung >Golang >Wie kann ich einen literalen Mustervergleich in PostgreSQL-Abfragen durchführen, um eine unbeabsichtigte Erweiterung der Suchergebnisse zu vermeiden?
Literaler Mustervergleich in PostgreSQL-Abfragen
In PostgreSQL erfordert die Durchführung des LIKE-Mustervergleichs für Zeichenfolgenspalten besondere Aufmerksamkeit beim Umgang mit vom Benutzer bereitgestellten Eingaben . Nicht validierte Eingaben mit Sonderzeichen (z. B. „_“ oder „%“) können die Suchergebnisse unbeabsichtigt erweitern. Um dieses Problem zu beheben, muss sichergestellt werden, dass diese Zeichen wörtlich interpretiert werden.
Clientseitiges oder serverseitiges Escapen
Die Entscheidung, ob das Escapen weiter behandelt werden soll Die Client- oder Serverseite hängt von den spezifischen Anforderungen ab. Bei der clientseitigen Escape-Funktion werden Benutzereingaben im Anwendungscode vorverarbeitet, bevor sie an die Datenbank gesendet werden. Dieser Ansatz bietet mehr Kontrolle, erfordert aber zusätzliche Verarbeitungslogik.
Serverseitiges Escapen
PostgreSQL bietet eine elegantere Lösung für serverseitiges Escapen. Mithilfe der ESCAPE-Klausel in der LIKE-Anweisung können Sie ein Sonderzeichen angeben, das für Platzhalterzeichen in Anführungszeichen verwendet werden soll. Dies verhindert, dass sie als Regex-Metazeichen interpretiert werden.
Zum Beispiel würde die folgende Abfrage genau mit der Zeichenfolge „rob“ übereinstimmen:
SELECT * FROM users WHERE name LIKE 'rob%' ESCAPE '^'
Überlegungen zum Escapezeichen
Bei der Verwendung von serverseitigem Escapezeichen ist Folgendes zu beachten:
Go-PGSQL-Beispiel
Für Go-PGSQL können Sie die folgende Abfrage verwenden, um einen literalen Mustervergleich durchzuführen:
db.Query("SELECT * from USERS where name like replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'", variable_user_input);
Diese Abfrage verwendet serverseitiger Ersatz für Escape-Platzhalterzeichen, ein alternatives Escape-Zeichen und doppeltes Escapezeichen, um die Literalübereinstimmung sicherzustellen und gleichzeitig vor SQL-Injection zu schützen.
Das obige ist der detaillierte Inhalt vonWie kann ich einen literalen Mustervergleich in PostgreSQL-Abfragen durchführen, um eine unbeabsichtigte Erweiterung der Suchergebnisse zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!