diff --git a/backend/server.js b/backend/server.js
index 839e4351..5e977a40 100644
--- a/backend/server.js
+++ b/backend/server.js
@@ -194,13 +194,23 @@ function composeInlineStyles(payload) {
return cssSegments.join('\n\n');
}
+function escapeHtml(str) {
+ if (!str) return '';
+ return String(str)
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
+
function renderBrandHeader(branding) {
- const displayName = branding.companyName || 'PicPeak';
- const logoSrc = branding.logoUrl || '/picpeak-logo-transparent.png';
+ const displayName = escapeHtml(branding.companyName || 'PicPeak');
+ const logoSrc = encodeURI(branding.logoUrl || '/picpeak-logo-transparent.png');
const logo = ``;
const tagline = branding.companyTagline
- ? `
${branding.companyTagline}
` + ? `${escapeHtml(branding.companyTagline)}
` : ''; return `${branding.footerText}
` + ? `${escapeHtml(branding.footerText)}
` : 'Powered by PicPeak to keep every celebration beautifully organised.
'; - const supportLink = branding.supportEmail - ? `Support` + const supportEmail = escapeHtml(branding.supportEmail || ''); + const supportLink = supportEmail + ? `Support` : ''; const legalLinks = ` @@ -282,7 +293,7 @@ function buildPublicSiteDocument(payload) { -