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

Wie schreibe ich eine parametrisierte SQL-Abfrage, um eine SQL-Injektion zu verhindern?

Ich bin kein Knex.js-Benutzer, aber wenn ich mir die Dokumentation anschaue, scheint es, dass Knex die Verwendung der JavaScript-Objektsyntax zum Definieren von Prädikaten ist, wie es die Parametrisierung erreicht.

Da Sie jedoch integrierte Funktionen verwenden, müssen Sie whereRaw verwenden .

Ein Blick in die Dokumentation ( http://knexjs.org/#Builder-whereRaw ) und ( http://knexjs.org/#Raw-Bindings ) Ich denke, Sie möchten dies tun:

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

Knex hat kein orWhereRaw , daher sollten Sie die Langversion verwenden, wenn Sie die Prädikate logisch trennen möchten:

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

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

Beachten Sie ? ist für Positionsparameter und :term ist für benannte Parameter.