gpt4 book ai didi

javascript - 如何防止数字数据的SQL注入(inject)

转载 作者:行者123 更新时间:2023-11-29 15:34:37 24 4
gpt4 key购买 nike

我编写了简短的源代码,并且运行良好。但我想防止SQL注入(inject)。因为这段代码无法阻止SQL注入(inject)。

这是我原来的代码

router.get(`/sitemap/:page`, function(req, res, next) {
let pageNumber = String(req.params.page) + "00";
db.query(
`SELECT * FROM user order by displayId*1 LIMIT ${pageNumber}, 100`,
function(error, data) {
if (error) {
throw error;
}
// console.log(data);
res.render("sitemap", {
dataarray: data,
pageNumber: pageNumber
});
}
);
});

效果很好,但无法阻止 SQL 注入(inject),所以我尝试了这个方法,但由于 ' 字符而出错。

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, 100' at line 1

[尝试另一种方法]

router.get(`/sitemap/:page`, function(req, res, next) {
let pageNumber = String(req.params.page) + "00";
db.query(
`SELECT * FROM user order by displayId*1 LIMIT ?, 100`,
[pageNumber], // I FIX THIS PART!!!!
function(error, data) {
if (error) {
throw error;
}
// console.log(data);
res.render("sitemap", {
dataarray: data,
pageNumber: pageNumber
});
}
);
});

我该如何解决这个问题。我认为它应该是字符串,所以我尝试了 String(pageNumber) 但仍然不起作用。

最佳答案

连接字符串中的参数总是会引发 SQL 注入(inject)。为什么不像 pageNumber 那样将 displayId 放入 params 数组中?

let pageNumber = String(req.params.page) + "00";
db.query(`SELECT * FROM user order by ? LIMIT ?, 100`,
[Number(displayId), pageNumber],

此外,您可以使用 Number 将字符串解析为数字,而不是使用与 1 相乘。它应该可以解决您的问题。

关于javascript - 如何防止数字数据的SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58370961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com