首页 > 解决方案 > 在 MysQl nodeJS 查询中转义数据数组的最佳方法

问题描述

所以我有以下对象是由用户提交的数据制作的,以便注册:

  var dataToInsert = { 
  userName: 'Wilson J',
  userEmail: 'WilsonJ@gmail.com',
  userAddress: '2020 St.',
  userCellPhone: '95587412',
  }

我正在使用以下查询来插入它:

 var insertQuery = `INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES( '${Object.values(dataToInsert).join("','")}' )`;

最后被视为:

INSERT INTO
  users (
    userName,
    userEmail,
    userAddress,
    userCellPhone
  )
VALUES
  (
    'Wilson J',
    'WilsonJ@gmail.com',
    '2020 St',
    95587412
  )

到目前为止,我很难理解数据转义是如何工作的。如果有人可以向我展示如何使用此代码进行 SQL 注入以及如何防止它,我将不胜感激。

我正在使用 MysQl npm 模块,它有这种方法:mysql.escape()但我想找到一种更自动化的方法,而不是手动转义每个值。

标签: javascriptmysqlnode.jssql-injection

解决方案


在这个时代,除了将变量绑定到您的查询之外,不鼓励做任何事情。有关转义数据的其他方法的更多信息,请参阅此内容:

connection.query(`
    INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`, 
    Object.values(dataToInsert),
    function (error, results, fields) {
      if (error) throw error;
      // ...
    }
);

注意事项:您将无法将变量绑定到列名,因此很遗憾,查询的这一部分是必需的。确保您的密钥dataToInsert是静态的,或者不是来自任何用户输入。


推荐阅读