From 87842c75855ab36acb080a910b1332008b5d5054 Mon Sep 17 00:00:00 2001 From: julien vdb Date: Mon, 27 Jul 2026 00:33:05 +0200 Subject: [PATCH] 0.13.18 : stop leaking password hash and tokens from /users/me MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- package.json | 2 +- src/extensions/users-permissions/strapi-server.ts | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b5c7cc1..5c8babc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harmony-back", - "version": "0.13.17", + "version": "0.13.18", "private": true, "description": "A Strapi application", "scripts": { diff --git a/src/extensions/users-permissions/strapi-server.ts b/src/extensions/users-permissions/strapi-server.ts index 1bbb3e9..e3a992a 100644 --- a/src/extensions/users-permissions/strapi-server.ts +++ b/src/extensions/users-permissions/strapi-server.ts @@ -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, };