在未经验证的情况下直接在Express.js路由中使用req.params是否存在漏洞?

时间:2018-10-23 09:23:25

标签: node.js express security

正如标题所述:直接在路由的回调函数中使用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');
});

1 个答案:

答案 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