mysql - 避免在 Node js 中的 SQL LIKE 查询中注入(inject)

标签 mysql node.js security sql-injection

就该主题提出了几个问题。但我在任何地方都找不到确切的答案。 下面的代码会导致sql注入(inject)吗?如果是的话如何逃脱?

db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + search + '%"', (err, result) => {
   if (err) throw err
   res.send(result)
})

我已经用 mysql.escape() 尝试了下面的代码。但在这种情况下 SQL 查询不起作用:

db.query('SELECT USER.id, USER.username FROM USER LEFT JOIN user_photo photo ON USER.id = photo.user_id WHERE USER.username LIKE "%' + mysql.escape(search) + '%"', (err, result) => {
   if (err) throw err
   res.send(result)
})

最佳答案

您可以在传递给查询的参数中指定 LIKE 模式,如下所示,该参数将按照记录 here 安全地转义

let search = "Terry";

let sql = `SELECT USER.id, USER.username FROM USER 
           LEFT JOIN user_photo photo 
           ON USER.id = photo.user_id WHERE USER.username LIKE ?`;

db.query(sql, [`%${search}%`], (err, result) => {
    if (err) throw err
    res.send(result);
})

关于mysql - 避免在 Node js 中的 SQL LIKE 查询中注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63189368/

相关文章:

php - .BAT 文件错误(语法)

php - 比较并提取剩余记录列表 Php Mysql

node.js - 错误!请求的依赖类型无效 : alias

database - 与 Postgres 安全的 TCP 连接?需要 SSL?

php - Laravel 迁移 SQLSTATE[42000] : Syntax error or access violation: 1064

javascript - 如何在 NodeJS 中访问 SQL 请求的结果?

javascript - 使用 Node.js 读写 vcard

javascript - grunt-jade - 如何编译单个 jade 文件而不是所有文件

java - 使用 CipherOutputStream + AES 将字符串写入文件

api - 从移动/网络应用向后端api发送每个请求的用户名和密码是否是个坏主意