#database #mongodb #express #obfuscation #data-hiding
#База данных #mongodb #экспресс #запутывание #скрытие данных
Вопрос:
Меня просят скрыть адрес электронной почты пользователя в базе данных. (СРЕДНИЙ стек).
Я новичок, и у меня возникли некоторые трудности с управлением некоторыми пакетами, такими как maskdata, crypto.js … и в какой-то момент меня вдохновила одна функция.
В моем коде для пользовательских контроллеров у меня есть 2 функции: одна для регистрации (называемая регистрацией) и одна для входа (называемая логином)
Для регистрации:
Я беру электронное письмо в теле запроса: req.body.email, и я передаю это как аргумент ab в функции, называемой obfuscator, идея состоит в том, чтобы иметь вместо почты серию цифр и букв, затем я сохраняю то, что возвращает функция с этим аргументомкак значение для почты пользователя в базе данных.
Для входа в систему:
Я беру электронное письмо в теле запроса и проверяю, что возвращает это req.body.email, после передачи в функции obfuscator, затем я выполняю поиск в базе данных этого результата в качестве почтового значения пользователя.
Я вижу, что она работает, так что с моим кодом что-то явно не так, или это приемлемо?
Я предполагаю, что это действительно плохая защита, но, по крайней мере, адрес электронной почты пользователя не отображается четко в базе данных.
Вот мой код:
function obfuscator(sentence) {
var mail = [];
for (let i in sentence) {
mail = sentence.charCodeAt(i).toString(process.env.BASE)
}
return mail
}
// inscription d'un utilisateur
exports.signup = (req, res, next) => {
bcrypt.hash(req.body.password, 10) // on hashe le mot de passe avec un salt de 10
.then(hash => {
const user = new User({
email: obfuscator(req.body.email), // on sauve un mail encodé
password: hash // et on assigne le hash obtenu comme valeur de la propriété password de l'objet user
});
console.log(user)
user.save() // et on sauve tout ça dans la base de données
.then(() => res.status(201).json({ message: 'new user created' }))
.catch(error => res.status(400).json({ error }));
})
.catch(error => res.status(500).json({ error }));
};
// connexion de l'utilisateur
exports.login = (req, res, next) => {
User.findOne({ email : obfuscator(req.body.email)}) // on recherche l'équivalent du mail encodé
.then(user => { // on recherche une objet de modèle User, ayant pour propriété "email" avec la même valeur que req.body.email
if (!user) { // pas trouvé ? = message: user not found
return res.status(401).json({ message: 'user not found' });
}
bcrypt.compare(req.body.password, user.password) // si on trouve, on prend le password et avec bcrypt on compare le passord and le requête avec le password du user trouvé dans la base de données
.then(valid => {
if (!valid) { // si le password n'est pas validé = message: incorrect password
return res.status(404).json({ message: "incorrect password" });
} // et si c'est valide....
res.status(200).json({
userId: user._id, // dans la réponse on renvoir le user._id (ce _id est donc l'id généré dans mongoDB)
token: jwt.sign( // et on renvoie un token d'authentification
{ userId: user._id },
process.env.TOKEN,
{ expiresIn: '24h' } // avec une date d'expiration
)
});
})
.catch(error => res.status(500).json({ error }));
})
.catch(error => res.status(500).json({ error }));
};
Комментарии:
1. Мне очень нравится название вашей функции!
2. У меня много воображения, лол
Ответ №1:
Я отвечаю на свой собственный вопрос:
Функция работает. Если необходимо скрыть (запутать), например, электронные письма в базе данных, это работает, это выполняет свою работу.
В любом случае, для выполнения этой работы лучше использовать проверенный эффективный пакет, а не тот, который упоминается в вопросе.