You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(review): escape email templates, drop invalid JSON-LD, document partial-failure policy
Addresses the code review on PR #1330:
- Critical: email templates were interpolating user-submitted strings
directly into HTML, leaking an XSS surface to the admin inbox. Added
utils/escapeHtml.ts with escapeHtml() + sanitizeHref() (rejects non-
http(s)/mailto URIs in href attributes) and wrapped every interpolation
in the volunteer, speaker, AND sponsor templates. The sponsor template
fix is pre-existing-bug cleanup included in the same pass per review.
- Medium: the JobPosting JSON-LD on /volunteer and /speakers violated
Google's rich-results guidelines (JobPosting is for paid employment,
was missing baseSalary and validThrough, and combined jobLocation with
TELECOMMUTE jobLocationType). Risk of "Deceptive structured data"
manual penalty. Removed both. Page-level metadata (title, description,
OG, Twitter) is kept; the site-wide Organization JSON-LD from the app
layout already covers brand-level structured data.
- High: documented the Promise.allSettled partial-failure policy in both
routers — if one channel fails we still return success to the user and
rely on Sentry + console.error to flag the gap; only both failing
errors out. Previously implicit.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments