/**
* HTML / XSS Sanitization Utilities
* Strips or escapes dangerous HTML from user-supplied text fields.
*/
const DANGEROUS_TAGS =
/<\s*\/?\s*(script|iframe|object|embed|form|link|style|meta|base|applet|svg|math)\b[^>]*>/gi;
const EVENT_HANDLERS = /\s+on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi;
const DANGEROUS_ATTRS =
/\s+(href|src|action|formaction|data|xlink:href)\s*=\s*["']?\s*javascript:/gi;
/**
* Strip dangerous HTML tags, event handler attributes, and javascript: URIs
* from user-provided text. Preserves benign HTML formatting.
*/
export function sanitizeHtml(input: string): string {
if (!input) return input;
let result = input;
// Remove dangerous tags entirely
result = result.replace(DANGEROUS_TAGS, "");
// Remove event handler attributes
result = result.replace(EVENT_HANDLERS, "");
// Remove javascript: URIs in common attributes
result = result.replace(DANGEROUS_ATTRS, "");
return result;
}
/**
* Escape all HTML — for contexts where no HTML is expected.
*/
export function escapeHtml(input: string): string {
if (!input) return input;
return input
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}