提问人:Tibia Cams 提问时间:11/13/2022 最后编辑:Tibia Cams 更新时间:11/13/2022 访问量:407
Node.JS - URL 参数中的 SQL 注入?
Node.JS - SQL Injection in URL parameters?
问:
我正在尝试学习 Node.js,我目前正在制作一个 Express 应用程序(使用 ejs),该应用程序将从 MySQL 数据库返回值,具体取决于用户访问的 URL。
例如,访问将列出 db 表中的所有用户。该链接将返回有关ID号为3的用户的信息。http://localhost:3000/test
users
http://localhost:3000/test/3
我的代码:/test
app.get("/test", (req, res) => {
let sql = "SELECT * FROM users ORDER BY name";
db.query(sql, function (err, results, fields) {
if (err)
logmessage(err.message);
res.render("test", { data: results });
});
});
这是 /test/:id 的代码
app.get("/test/:id", (req, res) => {
var userId = req.params.id;
let sql = "SELECT * FROM users WHERE id = " + userId;
db.query(sql, function (err, results, fields) {
if (err || !results.length) {
res.redirect("/");
} else {
res.render("test_user", { data: results });
}
});
});
我的问题是:这安全吗?当我以前从事PHP开发工作时,我习惯于在进行任何查询之前准备语句。
如果用户将 URL 从 : 更改为 并在 url 末尾插入一些 SQL 注入代码,会发生什么情况?数据库会被破坏吗?http://localhost:3000/test/3
这将用于 Web 上的实时应用程序,因此不能进行 SQL 注入非常重要。我还想稍后添加一个表单(req.body 而不是 req.params),我也需要对其进行清理。
或者 Node 中是否已经内置了“准备好的语句”?
答:
1赞
Heiko Theißen
11/13/2022
#1
如果使用占位符,则会阻止 SQL 注入:
let sql = "SELECT * FROM users WHERE id = ?";
db.query(sql, [userId], function (err, results, fields) {...});
0赞
Juan Arias
11/13/2022
#2
您是否尝试过实现 Sequelize?据我所知,ORM 会阻止 SQL 注入。此外,它非常易于使用:)
评论