|
|
@@ -1,7 +1,8 @@
|
|
|
import { marked, Renderer } from 'marked';
|
|
|
import type { Tokens } from 'marked';
|
|
|
import katex from 'katex';
|
|
|
-import DOMPurify from 'dompurify';
|
|
|
+// [perf-base-v1] 卡6: DOMPurify 消毒实现迁到公共 util,本文件转调避免两处漂移
|
|
|
+import { sanitizeHtml } from '/@/utils/markdownSafe';
|
|
|
|
|
|
const mdRenderer = new Renderer();
|
|
|
const defaultLinkRenderer = mdRenderer.link.bind(mdRenderer);
|
|
|
@@ -57,10 +58,8 @@ export const renderMarkdown = (
|
|
|
html = processFootnotes(html, maxCitationId);
|
|
|
html = renderLatexInHtml(html);
|
|
|
// Sanitize HTML to prevent XSS attacks
|
|
|
- html = DOMPurify.sanitize(html, {
|
|
|
- ADD_TAGS: ['img'],
|
|
|
- ADD_ATTR: ['target', 'data-action', 'data-table', 'data-icon', 'data-icon-success', 'data-n'],
|
|
|
- });
|
|
|
+ // [perf-base-v1] 卡6: 转调公共 sanitizeHtml(DOMPurify,ADD_TAGS:['img']),保留本模块额外交互属性白名单
|
|
|
+ html = sanitizeHtml(html, ['target', 'data-action', 'data-table', 'data-icon', 'data-icon-success', 'data-n']);
|
|
|
// 原始 HTML 锚点不经过 marked link renderer,统一补 target/rel
|
|
|
html = html.replace(/<a\b[^>]*>/gi, (tag) => {
|
|
|
let attrs = '';
|