当前位置: 首页 > 工具软件 > knex.js > 使用案例 >

mysql和knexjs_mysql – Knex.js会阻止sql注入吗?

柳豪
2023-12-01

请仔细阅读knex文档,了解如何将值传递给knex raw(

http://knexjs.org/#Raw).

如果要将值作为参数绑定传递给raw,如:

knex.raw('select * from foo where id = ?', [1])

在这种情况下,参数和查询字符串分别传递给数据库驱动程序保护SQL注入查询.

其他查询构建器方法内部始终使用绑定格式,因此它们也是安全的.

要查看如何将某个查询传递给数据库驱动程序,可以执

knex('foo').where('id', 1).toSQL().toNative()

使用knex原始查询可以做的最大错误是使用javascript模板字符串并直接将变量插入到SQL字符串格式,如:

knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS

需要注意的一点是,knex表/标识符名称不能作为绑定传递给驱动程序,因此对于那些人应该格外小心,不要从用户读取表/列名称并使用它们而不首先正确验证它们.

编辑:

通过说标识符名称不能作为绑定传递我的意思是当一个人使用?标识符名称的绑定绑定,在传递给数据库驱动程序时将作为SQL字符串的一部分呈现.

 类似资料: