Leia atentamente a documentação do knex sobre como passar valores para o knex raw (http://knexjs.org/#Raw ).
Se você estiver passando valores como vinculação de parâmetro para raw como:
knex.raw('select * from foo where id = ?', [1])
Nesse caso, os parâmetros e a string de consulta são passados separadamente para o driver de banco de dados, protegendo a consulta da injeção de SQL.
Outros métodos do construtor de consultas sempre usam o formato de ligação internamente para que também sejam seguros.
Para ver como determinada consulta é passada para o driver de banco de dados, pode-se fazer:
knex('foo').where('id', 1).toSQL().toNative()
Que produzirá a string SQL e as ligações que são fornecidas ao driver para executar a consulta (https://runkit.com/ embed/2yhqebv6pte6 ).
O maior erro que se pode cometer com consultas raw do knex é usar a string de modelo javascript e interpolar variáveis diretamente para o formato de string SQL como:
knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS
Uma coisa a notar é que os nomes de tabelas/identificadores knex não podem ser passados como ligações para o driver, portanto, com eles, deve-se ter cuidado extra para não ler nomes de tabelas/colunas do usuário e usá-los sem validá-los adequadamente primeiro.
Editar:
Ao dizer que os nomes dos identificadores não podem ser passados como ligações, quero dizer que quando se está usando
??
knex -binding para o nome do identificador, que será renderizado como parte da string SQL quando passado para o driver do banco de dados.