8.5 KiB
8.5 KiB
代码审查报告
文件: data\demo-pmd\src\jsp\JspFix.jsp
语言: html
耗时: 204.4s
分析工具: jsp
总计: 42 | 错误: 6 | 警告: 36 | 建议: 0
静态分析 · 38 个问题
- 🔴
pmd:NoLongScriptsL8 第 8 行:避免在 JSP 文件中包含较长的脚本(如 JavaScript)。 建议: 将 JavaScript 移至外部文件,创建 js/demo.js 并放入两个函数,用 <script src="js/demo.js"></script> 替换整个内联 <script> 块。 - 🔴
eslint:no-varL10 第 10 行:不应使用 var,请改用 let 或 const。 建议: total 在循环中会被修改,建议改为 let total = 0;。 - 🔴
eslint:no-varL11 第 11 行:不应使用 var,请改用 let 或 const。 建议: 循环变量应使用块级作用域,建议改为 let i = 0;。 - 🔴
eslint:no-unused-varsL16 第 16 行:'doMore' 已定义但从未使用。 建议: 删除 doMore 函数;如果后续需要 doStuff,可保留 doStuff 并从外部调用。 - 🔴
pmd:NoHtmlCommentsL23 第 23 行:请使用 JSP 注释代替 HTML 注释。 建议: 将 HTML 注释 改为 JSP 注释 <%-- this is an html comment --%>,避免注释内容发送到浏览器。 - 🟡
pmd:JspEncodingL1 第 1 行:JSP 文件应使用 UTF-8 编码。 建议: 在 page 指令中添加 pageEncoding="UTF-8",并将 contentType 设置为 text/html; charset=UTF-8。 - 🟡
pmd:NoInlineScriptL8 第 8 行:不应内联 HTML 脚本内容。 建议: 不要在内联 <script> 中写脚本;将脚本抽取到外部 JS 文件后通过 src 引入,避免内联脚本并降低 CSP 风险。 - 🟡
pmd:NoScriptletsL26 第 26 行:避免在 JSP 文件中使用 scriptlet(Java 代码片段)。 建议: 将业务逻辑移入 Servlet/后端;若当前只需输出 1+2 的结果,可直接使用 EL 表达式 ${1 + 2} 替代整个 scriptlet。 - 🟡
pmd:LocalVariableCouldBeFinalL27 第 27 行:局部变量 'x' 可声明为 final。 建议: 变量 x 声明后未再赋值,改为 final int x = 1;。 - 🟡
pmd:LocalVariableCouldBeFinalL28 第 28 行:局部变量 'y' 可声明为 final。 建议: 变量 y 声明后未再赋值,改为 final int y = 2;。 - 🟡
pmd:LocalVariableCouldBeFinalL29 第 29 行:局部变量 'z' 可声明为 final。 建议: 变量 z 声明后未再赋值,改为 final int z = x + y;。 - 🟡
pmd:NoJspForwardL33 第 33 行:不要从 JSP 文件内部执行转发。 建议: 将转发逻辑移到 Servlet 或 Filter 中,使用 request.getRequestDispatcher("other.jsp").forward(request, response);JSP 应只承担视图渲染。 - 🟡
pmd:NoScriptletsL35 第 35 行:避免在 JSP 文件中使用 scriptlet(Java 代码片段)。 建议: 该 scriptlet 中大量变量未被使用,仅依赖 xx + yy 的输出;应删除整个 scriptlet,直接用 EL 表达式 ${24 + 25} 输出结果。 - 🟡
pmd:UnusedLocalVariableL36 第 36 行:应避免未使用的局部变量 'a'。 建议: 删除未使用的局部变量 a。 - 🟡
pmd:UnusedLocalVariableL37 第 37 行:应避免未使用的局部变量 'b'。 建议: 删除未使用的局部变量 b。 - 🟡
pmd:UnusedLocalVariableL38 第 38 行:应避免未使用的局部变量 'c'。 建议: 删除未使用的局部变量 c。 - 🟡
pmd:UnusedLocalVariableL39 第 39 行:应避免未使用的局部变量 'd'。 建议: 删除未使用的局部变量 d。 - 🟡
pmd:UnusedLocalVariableL40 第 40 行:应避免未使用的局部变量 'e'。 建议: 删除未使用的局部变量 e。 - 🟡
pmd:UnusedLocalVariableL41 第 41 行:应避免未使用的局部变量 'f'。 建议: 删除未使用的局部变量 f。 - 🟡
pmd:UnusedLocalVariableL42 第 42 行:应避免未使用的局部变量 'g'。 建议: 删除未使用的局部变量 g。 - 🟡
pmd:UnusedLocalVariableL43 第 43 行:应避免未使用的局部变量 'h'。 建议: 删除未使用的局部变量 h。 - 🟡
pmd:UnusedLocalVariableL44 第 44 行:应避免未使用的局部变量 'i2'。 建议: 删除未使用的局部变量 i2。 - 🟡
pmd:UnusedLocalVariableL45 第 45 行:应避免未使用的局部变量 'j2'。 建议: 删除未使用的局部变量 j2。 - 🟡
pmd:UnusedLocalVariableL46 第 46 行:应避免未使用的局部变量 'k'。 建议: 删除未使用的局部变量 k。 - 🟡
pmd:UnusedLocalVariableL47 第 47 行:应避免未使用的局部变量 'l'。 建议: 删除未使用的局部变量 l。 - 🟡
pmd:UnusedLocalVariableL48 第 48 行:应避免未使用的局部变量 'm'。 建议: 删除未使用的局部变量 m。 - 🟡
pmd:UnusedLocalVariableL49 第 49 行:应避免未使用的局部变量 'n'。 建议: 删除未使用的局部变量 n。 - 🟡
pmd:UnusedLocalVariableL50 第 50 行:应避免未使用的局部变量 'o'。 建议: 删除未使用的局部变量 o。 - 🟡
pmd:UnusedLocalVariableL51 第 51 行:应避免未使用的局部变量 'p'。 建议: 删除未使用的局部变量 p。 - 🟡
pmd:UnusedLocalVariableL52 第 52 行:应避免未使用的局部变量 'q'。 建议: 删除未使用的局部变量 q。 - 🟡
pmd:UnusedLocalVariableL53 第 53 行:应避免未使用的局部变量 'r'。 建议: 删除未使用的局部变量 r。 - 🟡
pmd:UnusedLocalVariableL54 第 54 行:应避免未使用的局部变量 's2'。 建议: 删除未使用的局部变量 s2。 - 🟡
pmd:UnusedLocalVariableL55 第 55 行:应避免未使用的局部变量 't'。 建议: 删除未使用的局部变量 t。 - 🟡
pmd:UnusedLocalVariableL56 第 56 行:应避免未使用的局部变量 'u'。 建议: 删除未使用的局部变量 u。 - 🟡
pmd:UnusedLocalVariableL57 第 57 行:应避免未使用的局部变量 'v'。 建议: 删除未使用的局部变量 v。 - 🟡
pmd:UnusedLocalVariableL58 第 58 行:应避免未使用的局部变量 'w'。 建议: 删除未使用的局部变量 w。 - 🟡
pmd:LocalVariableCouldBeFinalL59 第 59 行:局部变量 'xx' 可声明为 final。 建议: 变量 xx 声明后未再赋值,改为 final int xx = 24;。 - 🟡
pmd:LocalVariableCouldBeFinalL60 第 60 行:局部变量 'yy' 可声明为 final。 建议: 变量 yy 声明后未再赋值,改为 final int yy = 25;。
AI 审查 · 4 条建议
- 🔴 [AI] [bug]
output-before-forwardL33 jsp:forward 之前已经输出响应内容,可能导致转发失败 第 23-31 行产生的 HTML 注释、div 和 out.println 输出都会先写入响应缓冲区;随后第 33 行才执行 jsp:forward。若缓冲区在转发前被提交,容器会抛出 IllegalStateException;即使未提交,之前输出也可能被丢弃或导致预期外的页面行为。 建议: 不要在 JSP 中直接做转发。将前置判断与转发逻辑放到 Servlet/Filter 中,通过 RequestDispatcher 转发;如果必须在 JSP 中处理,应确保转发发生在任何输出之前。 - 🟡 [AI] [design]
dead-inline-scriptL8 整段内联脚本为死代码 第 8-19 行的 <script> 中,doMore 未被任何地方调用,doStuff 只被 doMore 引用;如果没有外部脚本通过全局函数名调用这两个函数,整段脚本实际不可达。静态检查只报告了 doMore 未使用,未指出 doStuff 也随之为死代码。 建议: 确认无外部引用后删除整个 <script> 块;如果功能在未来需要使用,应抽取到外部 JS 文件再按需引入。 - 🟡 [AI] [security]
inline-style-cspL24 内联 style 属性削弱内容安全策略(CSP) 第 24 行使用 style="background-color: #f00;" 内联样式。若站点部署 CSP style-src,内联样式可能被阻止或被迫放宽策略;同时硬编码颜色难以复用和维护。 建议: 在外部样式表或页面 <style> 中定义 .error-block { background-color: #f00; },页面使用。 - 🟡 [AI] [security]
unescaped-scriptlet-outputL30 scriptlet 直接输出表达式,缺少 HTML 转义 第 30 行 out.println(z)(以及第 61 行的 out.println(xx + yy))直接将表达式写入响应。当前值是常量,但若这些位置掺入任何用户可控值,会形成反射型/存储型 XSS;JSP scriptlet 不会自动转义。 建议: 优先使用 JSTL <c:out> 输出;若暂时保留 scriptlet,应使用 OWASP Java Encoder 等工具对输出编码,例如 Encode.forHtml(String.valueOf(z))。