Прочетете внимателно от документацията на knex как да предавате стойности на knex raw (http://knexjs.org/#Raw ).
Ако предавате стойности като свързване на параметър към raw като:
knex.raw('select * from foo where id = ?', [1])
В този случай параметрите и низът на заявката се предават отделно към драйвера на базата данни, защитавайки заявката от SQL инжекция.
Други методи за създаване на заявки винаги използват вътрешно обвързващ формат, така че те също са безопасни.
За да видите как определена заявка се предава към драйвера на базата данни, можете да направите:
knex('foo').where('id', 1).toSQL().toNative()
Което ще изведе SQL низ и връзки, които се дават на драйвера за изпълнение на заявката (https://runkit.com/ embed/2yhqebv6pte6 ).
Най-голямата грешка, която човек може да направи с необработените заявки на knex, е да използва низ от шаблон на javascript и да интерполира променливи директно във формат на SQL низ като:
knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS
Едно нещо, което трябва да се отбележи, е, че имената на таблици/идентификатори на knex не могат да се предават като свързвания към драйвера, така че с тях трябва да внимавате да не четете имената на таблици/колони от потребителя и да ги използвате, без първо да ги валидирате правилно.
Редактиране:
Като казвам, че имената на идентификатори не могат да се предават като обвързване, имам предвид, че когато се използва ??
knex -binding за име на идентификатор, което ще бъде изобразено като част от SQL низ, когато се предаде на драйвера на базата данни.