gpt4 book ai didi

node.js - 网络安全。我是否正确保护了我的 REST api? (node.js 表达)

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:39 27 4
gpt4 key购买 nike

我有一个 MEAN 堆栈应用程序,带有类似 API 的 REST。我有两种用户类型:用户和管理员。为了让用户登录并保持 session ,我像这样使用 jsonwebtoken jwt(简化):

const jwt = require("jsonwebtoken");

//example user, normally compare pass, find user in db and return user
let user = { username: user.username, userType: user.userType };

const token = jwt.sign({ data: user }, secret, {
expiresIn: 604800 // 1 week
});

为了保护我的快速路线不受我这样做:

在此示例中,它是一个“获取用户”路由,允许管理员获取有关任何给定用户的信息。 “普通”用户只被允许获取关于他/她自己的信息,为什么我将请求的用户名与从 token 解码的用户名进行比较。

let decodeToken = function (token) {
let decoded;
try {
decoded = jwt.verify(token, secret);
} catch (e) {
console.log(e);
}
return decoded;
}

// Get one user - admin full access, user self-access
router.get('/getUser/:username', (req, res, next) => {
let username = req.params.username;
if (req.headers.authorization) {
let token = req.headers.authorization.replace(/^Bearer\s/, '');
decoded = decodeToken(token);

if (decoded.data.userType == 'admin') {
//do something admin only
} else if (decoded.data.username == username) {
//do something user (self) only
} else{
res.json({ success: false, msg: 'not authorized' });
}
} else {
res.json({ success: false, msg: 'You are not logged in.' });
}
})

所以我的问题是,这有多安全?有人可以操纵 session token 将用户名交换为其他人的用户名吗?甚至将用户类型从用户更改为管理员?

我的猜测是。只有当他们知道“ secret ”时,这就足够安全了吗? secret 毕竟就像存储在代码中的明文密码一样。什么是最佳实践?

最佳答案

the secret is after all just like a plain text password stored in the code.

没错。如果 secret 没有保密,那么攻击者可以伪造用户对象并使用该 secret 对其进行签名,而 verify 将无法区分两者。

将 secret 放入代码中可能会导致 secret 泄露。它可能会通过您的代码存储库泄漏,因为配置错误的服务器将 JS 源文件作为静态文件提供,或者因为攻击者找到了一种方法来利用 child_process 调用来回显服务器上的源文件。您的用户的安全不应取决于没有人犯这些常见错误。

What is best practice?

使用 key 管理系统 (KMS) 而不是自行滚动或在代码中嵌入 secret 。 Wikipedia

A key management system (KMS), also known as a cryptographic key management system (CKMS), is an integrated approach for generating, distributing and managing cryptographic keys for devices and applications.

通常,如何执行此操作取决于您的托管。例如,Google CloudAWS提供 key 管理服务。

https://www.npmjs.com/browse/keyword/kms可能会帮助您找到适合您堆栈的东西。

关于node.js - 网络安全。我是否正确保护了我的 REST api? (node.js 表达),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48281319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com