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

Hvordan skriver man parameteriseret sql-forespørgsel for at forhindre SQL-injektion?

Jeg er ikke en Knex.js-bruger, men ser man på dokumenterne ser det ud til, at Knex' brug af JavaScript-objektsyntaks til at definere prædikater er, hvordan den opnår parameterisering.

Men da du bruger indbyggede funktioner, skal du bruge whereRaw .

Ser på dokumenterne ( http://knexjs.org/#Builder-whereRaw ) og ( http://knexjs.org/#Raw-Bindings ) Jeg tror, ​​du vil gøre dette:

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

Knex har ikke en orWhereRaw , så du bør bruge langhåndsversionen, hvis du logisk vil adskille prædikaterne:

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

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

Bemærk ? er for positionelle parametre og :term er for navngivne parametre.



  1. Sådan indsætter du værdier af multiple select

  2. Sådan installeres og sikres MariaDB på CentOS 7

  3. iOS Udstationering af billeder og data til PHP mySQL-database

  4. Forkert heltalsværdi '' for en MySQL-kolonne, der er heltal og tillade null?