# 漏洞总结:JeecgBoot 消息内容存储型 XSS 漏洞 ## 漏洞概述 在 JeecgBoot 的 `/a/msg/msgInner/save` 接口中,`msgContent` 参数存在存储型 XSS 漏洞。攻击者可通过构造恶意 HTML 内容(如 ``)绕过服务端基于正则的过滤机制。当其他用户查看该消息时,恶意脚本将在其浏览器中执行。 ## 影响范围 - **受影响版本**:JeecgBoot 5.1.5 及更早版本 - **利用条件**:用户需具备发送消息权限 - **危害**:可导致任意 JavaScript 执行、会话劫持、权限提升等 ## 修复方案 ### 短期修复 1. **前端过滤**:使用 DOMPurify 对 `v-html` 渲染内容进行白名单过滤 ```javascript import DOMPurify from 'dompurify'; // Before assigning to v-html const sanitized = DOMPurify.sanitize(rawContent, { ALLOWED_TAGS: ['p', 'span', 'br', 'b', 'i', 'u', 'strong', 'em', 'a', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'blockquote', 'attr': ['style', 'href', 'target', 'class'], ALLOW_DATA_ATTR: false, ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // blocks javascript: and do }); ``` 2. **服务端过滤增强**: - 扩展黑名单标签:添加 `object`, `embed`, `svg`, `math`, `video`, `audio`, `form`, `details`, `base` 等 - 扩展属性协议检查:检查所有 URL 接受属性(不仅 `href` 和 `src`),并在匹配前解码 HTML 实体 ### 长期修复 替换正则过滤为服务端 HTML 安全库(如 OWASP Java HTML Sanitizer 或 Jsoup Cleaner),基于 DOM 树解析和语义过滤,避免正则绕过。 ## POC 代码 ### 1. 注入恶意内容 ```http POST /a/msg/msgInner/save HTTP/1.1 Host: localhost:3000 Content-Length: 300 Origin: http://localhost:3000 ... {"msgContent":""} ``` ### 2. 查看消息触发 XSS ```http GET /a/msg/msgInner/view HTTP/1.1 Host: localhost:3000 ... {"msgContent":""} ``` ### 3. 更强大的绕过 Payload(利用 HTML 实体编码) ```html ``` 或 ```html Click to view details ```