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.