From 860dffd547989a1d63d8af6828d0221f6c0a15cf Mon Sep 17 00:00:00 2001 From: freefire Date: Tue, 4 Aug 2026 13:04:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B8=96=E5=86=85=20CSS=20?= =?UTF-8?q?=E6=B1=A1=E6=9F=93=E6=95=B4=E9=A1=B5=EF=BC=9A=E5=89=8D=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E7=A6=81=E6=AD=A2=20style=20=E5=B9=B6=E6=B6=88?= =?UTF-8?q?=E6=AF=92=20HTML=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- frontend/src/utils/postContent.ts | 8 ++++- go.mod | 3 ++ go.sum | 6 ++++ handler/api.go | 2 ++ handler/seo_bot.go | 2 +- service/content.go | 5 ++- service/post.go | 4 +-- service/sanitize_html.go | 47 +++++++++++++++++++++++++ service/sanitize_html_test.go | 57 +++++++++++++++++++++++++++++++ 9 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 service/sanitize_html.go create mode 100644 service/sanitize_html_test.go diff --git a/frontend/src/utils/postContent.ts b/frontend/src/utils/postContent.ts index 72fea82..778a239 100644 --- a/frontend/src/utils/postContent.ts +++ b/frontend/src/utils/postContent.ts @@ -3,7 +3,11 @@ import type { Config } from 'dompurify'; import { enhanceCodeBlocks } from './enhanceCodeBlocks'; import { enhanceHeadingAnchors } from './postHeadings'; -/** DOMPurify 配置:允许会员专属自定义标签与链接 target */ +/** + * DOMPurify 配置:允许会员专属自定义标签与链接 target。 + * 注意:DOMPurify 3.x 默认放行 " + out := SanitizePostHTML(in) + if strings.Contains(strings.ToLower(out), "段落

` + out := SanitizePostHTML(in) + if strings.Contains(strings.ToLower(out), "style=") { + t.Fatalf("应剥离 style 属性,得到: %q", out) + } + if strings.Contains(strings.ToLower(out), "

` + + `
x
` + + `

清浮动

` + out := SanitizePostHTML(in) + for _, want := range []string{"members-only", "data-image-group", "data-layout", "data-clear-float", "清浮动"} { + if !strings.Contains(out, want) { + t.Fatalf("缺少 %q,得到: %q", want, out) + } + } +} + +func TestStripHTMLForSearch_DropsStyleText(t *testing.T) { + in := "
你好
" + out := StripHTMLForSearch(in) + if strings.Contains(out, "color") || strings.Contains(out, "red") { + t.Fatalf("摘要不应含 CSS,得到: %q", out) + } + if out != "你好" { + t.Fatalf("期望 %q,得到 %q", "你好", out) + } +}