我有一个node.js应用程序,我的工作,不幸的是一个错误的电子邮件地址被用于管理员帐户,我们不记得密码.
使用的哈希密钥类型为bcrypt。$2a$09$OczLcHx7lZQd1cgbLLmTrewUUx.nwEoZAuDembLxXI00mVEobyQZ6
我想知道是否有办法更改密码或添加一个新的管理员帐户完全。
我为解决管理员登录问题所做的事情。
我尝试过从phpmyadmin MySQL表中修改密码,也尝试过更改管理员电子邮件地址,但nodejs应用程序仍然无法识别这些更改。
这是我的password.js文件
const bcrypt = require("bcryptjs");
const db = require("../models/db");
exports.hashPassword = (password) => {
return new Promise((resolve, reject) => {
const newHashPassword = bcrypt.hash(password, 9);
resolve(newHashPassword)
})
}
exports.comparePassword = (password, hashPassword) => {
return new Promise((resolve, reject) => {
const same = bcrypt.compareSync(password, hashPassword);
resolve(same)
})
}
//SAVE RESET PASSWORD TOKEN TO DB
exports.saveResetPasswordIntoDB = (obj) => {
return new Promise((resolve, reject) => {
db.query("INSERT INTO f_password_reset_token SET ?", obj, (err, data) => {
if (err) reject(err)
else resolve(data)
})
})
}
//DELETE USER RESET PASSWORD TOKENs TO DB
exports.deleteResetPasswordByUserId = (userId) => {
return new Promise((resolve, reject) => {
db.query("DELETE FROM f_password_reset_token WHERE token_user = ?", parseInt(userId), (err, data) => {
if (err) reject(err)
else resolve(data)
})
})
}
//DELETE ALL RESET PASSWORD TOKENs TO DB
exports.deleteAllResetPassword = () => {
return new Promise((resolve, reject) => {
db.query("DELETE FROM f_password_reset_token", (err, data) => {
if (err) reject(err)
else resolve(data)
})
})
}
//CHECK IF USER HAS A TOKEN
exports.checkPasswordTokenByUserId = (userId,token) => {
return new Promise((resolve, reject) => {
db.query("SELECT * FROM f_password_reset_token WHERE token_user = ? AND token_code = ?", [parseInt(userId), token], (err, data) => {
if (err) reject(err)
else resolve(data[0])
})
})
}
1条答案
按热度按时间u4dcyp6a1#
如果它没有在生产中,为什么不暂时覆盖
comparePassword
函数中的bcrypt.compareSync
函数呢?根据npmjs,bcrypt.compareSync
函数返回true或false,这样就可以快速地修改oneliner,从而绕过密码检查。这不是最好的方法,也不能保证成功。你当然不应该在生产中这样做,但是它可以帮助你避开错误的密码,这样你就可以登录并重置/更改你自己的密码。例如:同样,这取决于授权流程的其余部分,但从理论上讲,每个有效的密码都是一个匹配的密码。可能你只需要登录,进入你的帐户,更改密码,这样你下次就可以像往常一样登录了。
如果您必须在生产过程中执行此操作,至少要安全一点...我认为变量“password”是明文,因此您可以执行以下操作:
注意,你不会是第一个使用这种肮脏伎俩的开发人员,忘记了它,后来发现有一个数据泄露。我工作的大多数泄露都涉及开发人员忘记了一些东西。