fix(kiosk): escape data-derived strings in innerHTML (RG-T15) #20

Merged
Corentin merged 1 commit from fix/p3-kiosk-escape-xss into dev 2026-06-16 14:20:52 +02:00

1 commit

Author SHA1 Message Date
Imugiii
a07bcbe3c8 fix(kiosk): escape data-derived strings injected into innerHTML (RG-T15)
All checks were successful
CI / secret-scan (pull_request) Successful in 7s
CI / php-lint (pull_request) Successful in 20s
CI / static-tests (push) Successful in 32s
CI / static-tests (pull_request) Successful in 32s
CI / secret-scan (push) Successful in 9s
CI / php-lint (push) Successful in 19s
CI / auto-merge (pull_request) Successful in 7s
CI / auto-merge (push) Has been skipped
RG-T15 (mlt.md) impose d'echapper toute valeur de catalogue rendue en HTML
cote borne. Seul page-product-menu.js definissait/appliquait escHtml ; les 3
autres scripts de rendu injectaient product.nom / item.libelle / product.image
directement dans innerHTML sans echappement.

- escHtml centralise et exporte depuis state.js (source unique, importe par les
  modules de page) au lieu d'etre duplique localement.
- Echappement applique aux champs data-derived dans page-products.js,
  page-product.js et page-cart.js (texte + attributs src/alt/aria-label des
  templates innerHTML, dont le sink src="${image}").

Les chemins document.title et setAttribute(...) restent inchanges : ce ne sont
pas des sinks HTML (assignation de texte, pas de parsing).

Donnees statiques aujourd'hui (data/*.json), mais data.js documente le bascule
P4 vers /api/products : ces memes champs deviendront des valeurs CRUD admin en
base, d'ou le risque de XSS stockee sur borne que cet echappement ferme.
2026-06-16 10:31:28 +00:00