JavaScript 在整个API中使用服务器端标头的安全吗
问题描述
在下面的verifyToken函数中,我检查令牌是否有效,提取令牌中的ID并将其分配给一个新的req.user标头。
我有两个问题:
- 这个服务器端添加的标头可以被Postman或自定义代码伪造吗?
- 在NodeJS代码中使用这个req.user.id值来验证数据的所有权,在能够编辑/删除信息之前是否安全?例如,为了编辑用户配置文件,我会检查req.user.id标头是否与数据库中的用户配置文件ID相同,然后允许编辑。这样安全吗?
以下是函数:
const verifyToken = (req, res, next) => {
const authHeader = req.headers.token;
try {
if (authHeader) {
const token = authHeader.split(" ")[1];
jwt.verify(token, process.env.JWT_SEC, (err, user) => {
if (err) {
res.status(403).json("Token is not valid!");
console.log(`validation failed for token ({token}):{err}`);
} else {
console.log("user validated");
req.user = user;
next();
}
});
}
} catch (err) {
return res.status(401).json("You are not authenticated!");
}
};
解决方案
- 客户端上运行的Postman和自定义代码无法访问服务器的秘钥
process.env.JWT_SEC
. -
req.user.id
是常见且合理的做法。
当JWT令牌被准确验证,并且您的授权逻辑健壮时,通常是安全的。