正如标题所述:直接在路由的回调函数中使用req.params.id
(在我的示例中)是否存在漏洞?
如果是这样,正确的方法是什么?
const express = require('express');
const app = express();
app.use('/:id',(req, res)=>{
// do something with id req.params.id
// like writing it to an DB
res.send(req.params.id);
})
app.listen(3000,()=>{
console.log('listening on http://localhost:3000/:id');
});
答案 0 :(得分:0)
是的,未经验证直接使用参数很容易受到攻击,您的系统可能会受到SQL注入攻击的劫持。
例如,假设您正在从数据库中获取用户信息,并且查询如下所示,
SELECT id, name, password from Users WHERE id = 1
您期望按照数据库中存储的格式获取ID,但是假设格式错误的请求包含ID为'1 ||是的',最终,您的查询会形成如下
SELECT id, name, password from Users WHERE id = 1 || True
此查询将返回数据库中所有用户的列表,并且您的代码将失败,因此最好在开始处理之前验证每个用户请求。
https://www.incapsula.com/web-application-security/sql-injection.html