node-js后端安全头



im正在尝试创建一个登录端点/api,并且我正在通过身份验证头发送用户登录数据,这对安全性来说可以吗?授权头实际上包含一个对象,它被编码为Base64,它包含用户数据,如散列密码(在本代码中尚未散列(、用户名和某种服务器密钥(用于授权是否是发送api请求的正确客户端(,只是想确保它是否安全

const aFunction = (req, res) => {
require('crypto').randomBytes(48, function(err, buffer) {
const token = buffer.toString('hex');
const auth = JSON.parse(Buffer.from(req.headers.authorization, 'base64').toString('ascii')) 

if(auth.serverkey == version["serverkey"]){
loginUser(auth.username,token).then(data =>{

if (data.rows.length < 1 || data.rows[0].password != auth.password) {
res.send({
status: "failed", 
message: "Username/Password is wrong", 
status_code: 400
})
}else{
res.send({
status: "success", 
message: "successfully logged in", 
status_code: 200, token: token
})
}
})
}else{
res.send({
status: "failed", 
message: "Unauthorized Client", 
status_code: 401
})
}
});



}

我会在代码中添加对if (req.secure)的检查,并拒绝任何非https请求。(如果你的nodejs程序在反向代理后面,就不要这样做。(

使用浏览器的用户可以看到您通过https或http来回发送到服务器的所有。(devtools(所以,如果通过阅读你的标题,他们可以找到如何向你发送恶意标题,那么有人会的。并且base64编码与完全不编码具有完全相同的安全性。所以,对你的密码撒盐并散列。使用bcrypt包或jwts。

我将以这种方式处理错误,通过使用错误参数调用next(),而不是使用.send()传递失败消息。使用这种代码。

const createError = require('http-errors')
...
const myfunction (req, res, next) {
...
if (!req.secure) return next(createError(403, 'https required'))
...
});

相关内容

  • 没有找到相关文章

最新更新