sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo escribir una consulta sql parametrizada para evitar la inyección de SQL?

No soy un usuario de Knex.js, pero mirando los documentos parece que el uso de la sintaxis de objetos JavaScript de Knex para definir predicados es la forma en que logra la parametrización.

Sin embargo, como está usando funciones integradas, necesita usar whereRaw .

Mirando los documentos ( http://knexjs.org/#Builder-whereRaw ) y ( http://knexjs.org/#Raw-Bindings ) Creo que quieres hacer esto:

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

Knex no tiene un orWhereRaw , por lo que debe usar la versión manual si desea separar lógicamente los predicados:

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

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

Nota ? es para parámetros posicionales, y :term es para parámetros con nombre.