2 回答
TA贡献1877条经验 获得超1个赞
构建此查询的方式正是您不想执行的操作。它使您对SQL注入完全开放。
若要避免此问题,需要参数化查询。这里的额外好处是,它将照顾所有逃跑。
下面是一个直接来自 MS 文档的示例,演示如何使用 SQL Server 的节点.js驱动程序执行参数化查询。
遵循此范例的代码将如下所示:
exports.addEntry = (req, res, nomPage, nomTable, data) => {
Object.keys(data).forEach(function (k, id) {
console.log(data[k]);
if (data[k] != null) {
if (id > 0) {
columnString += `,`;
dataString += `,`;
}
columnString += `${[k]}`;
dataString += `@${data[k]}`;
}
});
try {
if (!data) throw new Error("Input not valid");
if (data) {
var sqlQuery = `INSERT INTO ${nomTable} (${columnString}) VALUES (${dataString})`;
connect.connectDatabase(sqlQuery, (data, err) => {
[...]
所有改变的是操作构造.dataString
请注意,您现在需要将参数馈送到命令执行中,以替换之前嵌入的数据。
TA贡献1851条经验 获得超3个赞
有几种方法可以做到这一点:1 - 替换方括号的冒号,这将创建一个字符串值数组,那么你只需要担心通过数组长度进行排序,这将增加你的处理时间,但如果你的应用程序不是太大,它不应该有太大的区别。
2 - 用于对字符串中的单引号进行转义或对双引号进行转义。\'
\"
让我知道这是否有帮助,因为这是一个快速的答案。
添加回答
举报