0.13.18 : stop leaking password hash and tokens from /users/me
Le controller `me` renvoyait la ligne brute de `strapi.db.query`, sans passer par le sanitizer utilisé par `findOne` : le hash du mot de passe, `resetPasswordToken` et `confirmationToken` étaient envoyés au navigateur à chaque appel — et /users/me est appelé sur presque toutes les pages. Les trois champs sont retirés explicitement plutôt que via `sanitizeUser` : le sanitizer de l'API de contenu retirerait aussi les relations peuplées que le front consomme dans cette réponse. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -250,8 +250,21 @@ module.exports = (plugin) => {
|
||||
|
||||
const stats = await getUserStats(ctx.state.user.id);
|
||||
|
||||
// `strapi.db.query` renvoie la ligne brute : sans cette omission, /users/me
|
||||
// exposait au navigateur le hash du mot de passe et les jetons de
|
||||
// réinitialisation et de confirmation.
|
||||
// On retire ces champs explicitement plutôt que de passer par
|
||||
// `sanitizeUser` : le sanitizer de l'API de contenu retirerait aussi les
|
||||
// relations peuplées que le front consomme ici.
|
||||
const {
|
||||
password: _password,
|
||||
resetPasswordToken: _resetPasswordToken,
|
||||
confirmationToken: _confirmationToken,
|
||||
...safeUser
|
||||
} = JSON.parse(JSON.stringify(fullUser));
|
||||
|
||||
const result = {
|
||||
...JSON.parse(JSON.stringify(fullUser)),
|
||||
...safeUser,
|
||||
stats,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user