Files
2026Technology-Competition/data/demo-pmd/reports/SecurityDemo-review.md
T

46 lines
3.1 KiB
Markdown

# 代码审查报告
**文件:** `data\demo-pmd\src\jsp\SecurityDemo.jsp`
**语言:** html
**耗时:** 56.5s
**分析工具:** jsp
---
总计: 8 | 错误: 3 | 警告: 5 | 建议: 0
AI 审查 · 8 条建议
- 🔴 [AI] [bug] `missing-jstl-taglib-declaration` L1
**缺少 JSTL 标签库声明**
页面在第 20 行使用了 JSTL core 标签 <c:out>,但未在页面顶部声明 taglib,导致 JSP 无法编译或运行时抛出标签解析异常。
建议: 在页面顶部添加 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 指令。
- 🔴 [AI] [security] `xss-unescaped-el-expression` L16
**未转义的 EL 表达式导致跨站脚本(XSS)**
第 16 行直接将用户可控的 ${userInput} 输出到 HTML 上下文,未进行任何编码,攻击者可通过构造恶意脚本实施反射型 XSS 攻击。
建议: 使用 <c:out> 或 fn:escapeXml() 对输出进行 HTML 实体转义,例如 <c:out value="${userInput}"/>。
- 🔴 [AI] [security] `xss-unescaped-el-expression` L17
**未转义的 EL 表达式导致跨站脚本(XSS)**
第 17 行直接将用户可控的 ${searchTerm} 输出到 HTML 上下文,未进行任何编码,攻击者可通过构造恶意脚本实施反射型 XSS 攻击。
建议: 使用 <c:out> 或 fn:escapeXml() 对输出进行 HTML 实体转义,例如 <c:out value="${searchTerm}"/>。
- 🟡 [AI] [style] `missing-page-encoding-directive` L1
**JSP 页面缺少 pageEncoding 指令**
虽然 contentType 中指定了 charset,但 JSP 源文件的编码最好通过 pageEncoding 明确指定,避免不同容器对源文件编码的误判。
建议: 在 page 指令中添加 pageEncoding="UTF-8" 属性。
- 🟡 [AI] [style] `missing-doctype-declaration` L6
**缺少 HTML 文档类型声明**
页面未声明 <!DOCTYPE html>,可能导致浏览器以 Quirks 模式渲染,造成样式和布局不一致。
建议: 在 <html> 标签前添加 <!DOCTYPE html>。
- 🟡 [AI] [security] `iframe-missing-src-attribute` L12
**iframe 缺少 src 属性**
第 12 行的 iframe 没有 src 属性,会渲染为空白区域,且可能被用作恶意行为(如点击劫持)的容器;若用作占位,建议给出明确的来源或移除。
建议: 为 iframe 添加有效的 src 属性,或使用其他 HTML 元素代替空 iframe。
- 🟡 [AI] [security] `iframe-missing-src-attribute` L13
**iframe 缺少 src 属性**
第 13 行的 iframe 没有 src 属性,会渲染为空白区域,且可能被用作恶意行为(如点击劫持)的容器;若用作占位,建议给出明确的来源或移除。
建议: 为 iframe 添加有效的 src 属性,或使用其他 HTML 元素代替空 iframe。
- 🟡 [AI] [security] `iframe-missing-sandbox-attribute` L21
**iframe 缺少 sandbox 属性**
当 iframe 加载外部内容时,未设置 sandbox 属性,会让嵌入式内容拥有与页面相同的权限,存在点击劫持、脚本执行等风险。建议为 iframe 添加 sandbox 属性,并按需开启权限。
建议: 为 iframe 添加 sandbox="allow-scripts allow-same-origin" 等最小化权限,或使用空 sandbox 属性以获取最高隔离级别。