From 8b5695483f01655b53fb332290cb3929bab68f09 Mon Sep 17 00:00:00 2001 From: phucnguyen1707 Date: Mon, 15 Jun 2026 14:07:36 +0700 Subject: [PATCH] Sanitize rendered web content --- .../contract/html-sanitizer.test.ts | 19 ++ apps/logicsrc-web/package.json | 4 +- .../logicsrc-web/src/app/blog/[slug]/page.tsx | 4 +- .../logicsrc-web/src/app/docs/[slug]/page.tsx | 4 +- apps/logicsrc-web/src/lib/html.ts | 33 +++ package-lock.json | 236 ++++++++---------- 6 files changed, 167 insertions(+), 133 deletions(-) create mode 100644 apps/logicsrc-web/contract/html-sanitizer.test.ts create mode 100644 apps/logicsrc-web/src/lib/html.ts diff --git a/apps/logicsrc-web/contract/html-sanitizer.test.ts b/apps/logicsrc-web/contract/html-sanitizer.test.ts new file mode 100644 index 0000000..8fc14a3 --- /dev/null +++ b/apps/logicsrc-web/contract/html-sanitizer.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; + +import { sanitizeRenderedHtml } from "@/lib/html"; + +describe("sanitizeRenderedHtml", () => { + it("removes script tags, event handlers, and javascript URLs", () => { + const html = sanitizeRenderedHtml( + '

Title

Hello

bad' + ); + + expect(html).toContain("

Title

"); + expect(html).toContain("

Hello

"); + expect(html).toContain(''); + expect(html).toContain("bad"); + expect(html).not.toContain("