PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich die SQL-Einschleusung mit einer beliebigen JSONB-Abfragezeichenfolge verhindern, die von einem externen Client bereitgestellt wird?

Sie könnten den Benutzern erlauben, einen Pfad innerhalb des JSON-Dokuments anzugeben, und diesen Pfad dann innerhalb eines Aufrufs einer Funktion wie json_extract_path_text . Das heißt, die WHERE-Klausel würde folgendermaßen aussehen:

WHERE json_extract_path_text(data, $1) = $2

Das Pfadargument ist nur eine einfach zu parametrisierende Zeichenkette, die die Tasten beschreibt, die bis zum angegebenen Wert durchlaufen werden sollen, z. 'foo.bars[0].name' . Die rechte Seite der Klausel würde nach denselben Regeln parametrisiert, die Sie für die feste Spaltenfilterung verwenden.