From 59013cf0af9a53058dca311382d83f79ff8a3818 Mon Sep 17 00:00:00 2001 From: phucnguyen1707 <83052776+phucnguyen1707@users.noreply.github.com> Date: Mon, 15 Jun 2026 15:34:44 +0700 Subject: [PATCH] Sanitize rendered web content (#77) --- .../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("