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

Come scrivere una query sql parametrizzata per impedire l'iniezione di SQL?

Non sono un utente Knex.js, ma guardando i documenti sembra che l'uso da parte di Knex della sintassi degli oggetti JavaScript per definire i predicati sia il modo in cui ottiene la parametrizzazione.

Tuttavia, poiché stai utilizzando le funzioni integrate, devi utilizzare whereRaw .

Guardando i documenti ( http://knexjs.org/#Builder-whereRaw ) e ( http://knexjs.org/#Raw-Bindings ) Penso che tu voglia farlo:

.whereRaw('question LIKE :term OR note LIKE :term OR user_name LIKE :term', { term: '%' + term + '%' ] } )

Knex non ha un orWhereRaw , quindi dovresti usare la versione a mano lunga se vuoi separare logicamente i predicati:

term = '%' + term + '%';

.orWhere( knex.raw( 'question  LIKE ?', [ term ] ) )
.orWhere( knex.raw( 'note      LIKE ?', [ term ] ) )
.orWhere( knex.raw( 'user_name LIKE ?', [ term ] ) )

Nota ? è per i parametri posizionali e :term è per parametri denominati.