PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso impedire l'iniezione di SQL con una stringa di query JSONB arbitraria fornita da un client esterno?

Potresti consentire agli utenti di specificare un percorso all'interno del documento JSON e quindi parametrizzare quel percorso all'interno di una chiamata a una funzione come json_extract_path_text . Cioè, la clausola WHERE sarebbe simile a:

WHERE json_extract_path_text(data, $1) = $2

L'argomento del percorso è solo una stringa, facilmente parametrizzabile, che descrive le chiavi da percorrere fino al valore dato, ad es. 'foo.bars[0].name' . Il lato destro della clausola verrebbe parametrizzato secondo le stesse regole che utilizzi per il filtraggio delle colonne fisse.