Echapper les champs injectes sans esc() dans l'apercu creatures et le dropdown de preregleages #64

Closed
opened 2026-07-02 05:36:22 +00:00 by Reliodas · 0 comments
Owner

Contexte

L'invariant du depot (AGENTS.md) demande d'echapper avec esc() tout champ visible sur la carte provenant d'un formulaire ou d'une donnee modifiable avant injection HTML. L'audit du 2026-07-02 a releve deux points ou cet invariant n'est pas respecte :

  1. creatures.html, fonction updatePreview() (~ligne 596) : la ligne de stats du verso injecte ac, hp, speed et initVal sans esc() dans back-stats / back-stats-land. Le chemin d'impression (renderCardPairHtml, ~ligne 852) echappe pourtant ces memes champs — l'apercu et l'impression sont incoherents.
  2. card-editor.js, renderPresetDropdown (~ligne 62) : le label des prereglages est injecte sans esc() dans le dropdown. Les labels viennent des fichiers data/*.js, mais un nom contenant <, > ou & casserait l'affichage.

Modifications a faire

  • Echapper ac, hp, speed, initVal avec esc() dans le statsHtml de l'apercu de creatures.html, comme le fait deja le rendu d'impression.
  • Echapper le label dans renderPresetDropdown de card-editor.js.
  • Verifier qu'aucun autre editeur n'injecte de champ formulaire sans echappement (l'audit n'a rien releve d'autre, a re-confirmer au passage).

Criteres d'acceptation

  • Une valeur contenant <b>test</b> saisie dans CA/PV/Vitesse/Init s'affiche litteralement dans l'apercu du verso creatures (pas de HTML interprete).
  • Le dropdown de prereglages affiche litteralement un label contenant des caracteres HTML.
  • node scripts/smoke-test.js et node tests/visual-validation.js passent.
  • Le rendu imprime des cartes creatures est inchange pour des valeurs normales.
## Contexte L'invariant du depot (AGENTS.md) demande d'echapper avec `esc()` tout champ visible sur la carte provenant d'un formulaire ou d'une donnee modifiable avant injection HTML. L'audit du 2026-07-02 a releve deux points ou cet invariant n'est pas respecte : 1. `creatures.html`, fonction `updatePreview()` (~ligne 596) : la ligne de stats du verso injecte `ac`, `hp`, `speed` et `initVal` sans `esc()` dans `back-stats` / `back-stats-land`. Le chemin d'impression (`renderCardPairHtml`, ~ligne 852) echappe pourtant ces memes champs — l'apercu et l'impression sont incoherents. 2. `card-editor.js`, `renderPresetDropdown` (~ligne 62) : le label des prereglages est injecte sans `esc()` dans le dropdown. Les labels viennent des fichiers `data/*.js`, mais un nom contenant `<`, `>` ou `&` casserait l'affichage. ## Modifications a faire - Echapper `ac`, `hp`, `speed`, `initVal` avec `esc()` dans le `statsHtml` de l'apercu de `creatures.html`, comme le fait deja le rendu d'impression. - Echapper le label dans `renderPresetDropdown` de `card-editor.js`. - Verifier qu'aucun autre editeur n'injecte de champ formulaire sans echappement (l'audit n'a rien releve d'autre, a re-confirmer au passage). ## Criteres d'acceptation - Une valeur contenant `<b>test</b>` saisie dans CA/PV/Vitesse/Init s'affiche litteralement dans l'apercu du verso creatures (pas de HTML interprete). - Le dropdown de prereglages affiche litteralement un label contenant des caracteres HTML. - `node scripts/smoke-test.js` et `node tests/visual-validation.js` passent. - Le rendu imprime des cartes creatures est inchange pour des valeurs normales.
Reliodas added this to the 1.0.0-beta milestone 2026-07-02 05:36:22 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: dnd/cards#64
No description provided.