如何防止 SQL 注入数字数据
How to prevent SQL injection with number data
我编写了简短的源代码并且运行良好。但是我想防止 SQL 注入。因为这段代码不能防止 SQL 注入。
这是我的原始代码
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注入,所以我尝试了这个方法,但由于'字符而出错。
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 注入。为什么不像 pageNumber
那样将 displayId
放入 params 数组中?
let pageNumber = String(req.params.page) + "00";
db.query(`SELECT * FROM user order by ? LIMIT ?, 100`,
[Number(displayId), pageNumber],
此外,您可以使用 Number
将字符串解析为数字,而不是使用乘以 1。
它应该可以解决您的问题。
我编写了简短的源代码并且运行良好。但是我想防止 SQL 注入。因为这段代码不能防止 SQL 注入。
这是我的原始代码
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注入,所以我尝试了这个方法,但由于'字符而出错。
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 注入。为什么不像 pageNumber
那样将 displayId
放入 params 数组中?
let pageNumber = String(req.params.page) + "00";
db.query(`SELECT * FROM user order by ? LIMIT ?, 100`,
[Number(displayId), pageNumber],
此外,您可以使用 Number
将字符串解析为数字,而不是使用乘以 1。
它应该可以解决您的问题。