所以我有以下对象是由用户提交的数据进行注册的:
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()
,但我想找到一种更自动化的方法,而不是手动转义每个值。
答案 0 :(得分:3)
在当今时代,除了将变量绑定到查询之外,不建议执行任何其他操作。有关其他转义数据方法的更多信息,请参见this:
connection.query(`
INSERT INTO users ( ${Object.keys(dataToInsert).toString()} ) VALUES (?)`,
Object.values(dataToInsert),
function (error, results, fields) {
if (error) throw error;
// ...
}
);
注意事项:您将无法将变量绑定到列名,因此不幸的是,该部分查询是必需的。确保dataToInsert
的密钥是静态的,或者不是来自任何用户输入的密钥。
答案 1 :(得分:0)
或者,您可以使用?字符作为占位符,用作您要转义的值,例如:[...]
有一种方法。 https://github.com/mysqljs/mysql#user-content-escaping-query-values