我的网络应用程序的安全性存在很大的问题。 当用户登录我的应用程序时,我实现了 JWT token (REST API 返回 token )。
在我的 jwt token 中,我只有 userID。问题是,当我想登录 ID = 1 的用户时,
我可以使用相同的 token 查看并执行所有其他用户的其余操作。例如:
当我搜索 userId = 1 时,我执行 GET 操作:/api/users/1 并且我有关于用户 1 的信息。但我可以执行操作/api/users/2、3 等。
全部用一个 token 。如何保护它?
const jwt = require('jsonwebtoken');
const env = require('../config/env.config.js');
module.exports = (req, res, next) => {
try {
const token = req.headers.authorization.split(' ')[1];
const decoded = jwt.verify(token, env.SECRET_KEY);
req.userData = decoded;
next();
} catch (error) {
return res.status(401).json({
message: 'Auth failed',
});
}
};
最佳答案
我认为最好的解决方案是创建中间件来检查发件人的 ID 并将其附加到路由,类似于以下内容
const middleware = (req, res, next) => {
const id = req.params.id || req.body.id || req.query.id
if (req.userData.id === id) {
next()
} else {
res.status(403).send({message: "forbidden"})
}
}
router.get("/api/users/:id", middleware, (req, res) => {
// do your staff
res.send({message: "ok"})
})
router.put("/api/users/:id", middleware, (req, res) => {
// do your staff
res.send({message: "ok"})
})
关于javascript - 安全性大问题(JWT Node JS),一个 token 用于所有访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54367792/