Files
mercadodevida/work/artifacts/F-077/implementer.md
2026-08-19 19:33:26 +02:00

1.2 KiB

F-077 — Implementer evidence: Product short description renders HTML in admin product list

Problem

The admin product listing rendered p.description as plain text. HTML tags like <strong>, <em> were shown as literal text (e.g., <strong>Fresh</strong>) instead of formatted text (Fresh).

Changes

project/apps/admin/src/app/(dashboard)/products/page.tsx:

  • Added renderHtml(html) helper function:
    • Strips <script> tags (XSS vector)
    • Strips on*="..." event handler attributes (XSS vector)
    • Strips javascript: URLs
    • Strips <iframe>, <object>, <embed> tags
    • Preserves safe formatting tags: <b>, <i>, <em>, <strong>, <br>, <p>, <span>, <u>, etc.
  • Replaced {p.description?.slice(0, 60) ?? p.slug} with dangerouslySetInnerHTML={{ __html: renderHtml(p.description ?? '').slice(0, 60) || p.slug }}
  • The truncate CSS class still works on the rendered HTML

Verification

  • npx tsc --noEmit admin — exit 0
  • npx eslint on changed file — exit 0
  • ./scripts/verify.sh — exit 0

Files touched

project/apps/admin/src/app/(dashboard)/products/page.tsx   (modified)
work/artifacts/F-077/implementer.md                     (this file)