在 MysQl nodeJS 查询中转义数据数组的最佳方法
Best way to escape array of data on MysQl nodeJS query
所以我有以下对象,它是由用户为了注册而提交的数据构成的:
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()
但我想找到一种更自动化的方法,而不是手动转义每个值。
Alternatively, you can use ? characters as placeholders for values you would like to have escaped like this: [...]
有办法。 https://github.com/mysqljs/mysql#user-content-escaping-query-values
在当今时代,除了将变量绑定到查询之外,不鼓励做任何其他事情。有关转义数据的其他方法的更多信息,请参阅 this:
connection.query(`
INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`,
Object.values(dataToInsert),
function (error, results, fields) {
if (error) throw error;
// ...
}
);
警告:您无法将变量绑定到列名,因此很遗憾,查询的这一部分是必需的。确保您 dataToInsert
的密钥是静态的,或者不是来自任何用户输入。
所以我有以下对象,它是由用户为了注册而提交的数据构成的:
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()
但我想找到一种更自动化的方法,而不是手动转义每个值。
Alternatively, you can use ? characters as placeholders for values you would like to have escaped like this: [...]
有办法。 https://github.com/mysqljs/mysql#user-content-escaping-query-values
在当今时代,除了将变量绑定到查询之外,不鼓励做任何其他事情。有关转义数据的其他方法的更多信息,请参阅 this:
connection.query(`
INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`,
Object.values(dataToInsert),
function (error, results, fields) {
if (error) throw error;
// ...
}
);
警告:您无法将变量绑定到列名,因此很遗憾,查询的这一部分是必需的。确保您 dataToInsert
的密钥是静态的,或者不是来自任何用户输入。