Files

8.5 KiB
Raw Permalink Blame History

代码审查报告

文件: data\demo-pmd\src\jsp\JspFix.jsp 语言: html 耗时: 204.4s 分析工具: jsp


总计: 42 | 错误: 6 | 警告: 36 | 建议: 0

静态分析 · 38 个问题

  • 🔴 pmd:NoLongScripts L8 第 8 行:避免在 JSP 文件中包含较长的脚本(如 JavaScript)。 建议: 将 JavaScript 移至外部文件,创建 js/demo.js 并放入两个函数,用 <script src="js/demo.js"></script> 替换整个内联 <script> 块。
  • 🔴 eslint:no-var L10 第 10 行:不应使用 var,请改用 let 或 const。 建议: total 在循环中会被修改,建议改为 let total = 0;。
  • 🔴 eslint:no-var L11 第 11 行:不应使用 var,请改用 let 或 const。 建议: 循环变量应使用块级作用域,建议改为 let i = 0;。
  • 🔴 eslint:no-unused-vars L16 第 16 行:'doMore' 已定义但从未使用。 建议: 删除 doMore 函数;如果后续需要 doStuff,可保留 doStuff 并从外部调用。
  • 🔴 pmd:NoHtmlComments L23 第 23 行:请使用 JSP 注释代替 HTML 注释。 建议: 将 HTML 注释 改为 JSP 注释 <%-- this is an html comment --%>,避免注释内容发送到浏览器。
  • 🟡 pmd:JspEncoding L1 第 1 行:JSP 文件应使用 UTF-8 编码。 建议: 在 page 指令中添加 pageEncoding="UTF-8",并将 contentType 设置为 text/html; charset=UTF-8。
  • 🟡 pmd:NoInlineScript L8 第 8 行:不应内联 HTML 脚本内容。 建议: 不要在内联 <script> 中写脚本;将脚本抽取到外部 JS 文件后通过 src 引入,避免内联脚本并降低 CSP 风险。
  • 🟡 pmd:NoScriptlets L26 第 26 行:避免在 JSP 文件中使用 scriptletJava 代码片段)。 建议: 将业务逻辑移入 Servlet/后端;若当前只需输出 1+2 的结果,可直接使用 EL 表达式 ${1 + 2} 替代整个 scriptlet。
  • 🟡 pmd:LocalVariableCouldBeFinal L27 第 27 行:局部变量 'x' 可声明为 final。 建议: 变量 x 声明后未再赋值,改为 final int x = 1;。
  • 🟡 pmd:LocalVariableCouldBeFinal L28 第 28 行:局部变量 'y' 可声明为 final。 建议: 变量 y 声明后未再赋值,改为 final int y = 2;。
  • 🟡 pmd:LocalVariableCouldBeFinal L29 第 29 行:局部变量 'z' 可声明为 final。 建议: 变量 z 声明后未再赋值,改为 final int z = x + y;。
  • 🟡 pmd:NoJspForward L33 第 33 行:不要从 JSP 文件内部执行转发。 建议: 将转发逻辑移到 Servlet 或 Filter 中,使用 request.getRequestDispatcher("other.jsp").forward(request, response)JSP 应只承担视图渲染。
  • 🟡 pmd:NoScriptlets L35 第 35 行:避免在 JSP 文件中使用 scriptletJava 代码片段)。 建议: 该 scriptlet 中大量变量未被使用,仅依赖 xx + yy 的输出;应删除整个 scriptlet,直接用 EL 表达式 ${24 + 25} 输出结果。
  • 🟡 pmd:UnusedLocalVariable L36 第 36 行:应避免未使用的局部变量 'a'。 建议: 删除未使用的局部变量 a。
  • 🟡 pmd:UnusedLocalVariable L37 第 37 行:应避免未使用的局部变量 'b'。 建议: 删除未使用的局部变量 b。
  • 🟡 pmd:UnusedLocalVariable L38 第 38 行:应避免未使用的局部变量 'c'。 建议: 删除未使用的局部变量 c。
  • 🟡 pmd:UnusedLocalVariable L39 第 39 行:应避免未使用的局部变量 'd'。 建议: 删除未使用的局部变量 d。
  • 🟡 pmd:UnusedLocalVariable L40 第 40 行:应避免未使用的局部变量 'e'。 建议: 删除未使用的局部变量 e。
  • 🟡 pmd:UnusedLocalVariable L41 第 41 行:应避免未使用的局部变量 'f'。 建议: 删除未使用的局部变量 f。
  • 🟡 pmd:UnusedLocalVariable L42 第 42 行:应避免未使用的局部变量 'g'。 建议: 删除未使用的局部变量 g。
  • 🟡 pmd:UnusedLocalVariable L43 第 43 行:应避免未使用的局部变量 'h'。 建议: 删除未使用的局部变量 h。
  • 🟡 pmd:UnusedLocalVariable L44 第 44 行:应避免未使用的局部变量 'i2'。 建议: 删除未使用的局部变量 i2。
  • 🟡 pmd:UnusedLocalVariable L45 第 45 行:应避免未使用的局部变量 'j2'。 建议: 删除未使用的局部变量 j2。
  • 🟡 pmd:UnusedLocalVariable L46 第 46 行:应避免未使用的局部变量 'k'。 建议: 删除未使用的局部变量 k。
  • 🟡 pmd:UnusedLocalVariable L47 第 47 行:应避免未使用的局部变量 'l'。 建议: 删除未使用的局部变量 l。
  • 🟡 pmd:UnusedLocalVariable L48 第 48 行:应避免未使用的局部变量 'm'。 建议: 删除未使用的局部变量 m。
  • 🟡 pmd:UnusedLocalVariable L49 第 49 行:应避免未使用的局部变量 'n'。 建议: 删除未使用的局部变量 n。
  • 🟡 pmd:UnusedLocalVariable L50 第 50 行:应避免未使用的局部变量 'o'。 建议: 删除未使用的局部变量 o。
  • 🟡 pmd:UnusedLocalVariable L51 第 51 行:应避免未使用的局部变量 'p'。 建议: 删除未使用的局部变量 p。
  • 🟡 pmd:UnusedLocalVariable L52 第 52 行:应避免未使用的局部变量 'q'。 建议: 删除未使用的局部变量 q。
  • 🟡 pmd:UnusedLocalVariable L53 第 53 行:应避免未使用的局部变量 'r'。 建议: 删除未使用的局部变量 r。
  • 🟡 pmd:UnusedLocalVariable L54 第 54 行:应避免未使用的局部变量 's2'。 建议: 删除未使用的局部变量 s2。
  • 🟡 pmd:UnusedLocalVariable L55 第 55 行:应避免未使用的局部变量 't'。 建议: 删除未使用的局部变量 t。
  • 🟡 pmd:UnusedLocalVariable L56 第 56 行:应避免未使用的局部变量 'u'。 建议: 删除未使用的局部变量 u。
  • 🟡 pmd:UnusedLocalVariable L57 第 57 行:应避免未使用的局部变量 'v'。 建议: 删除未使用的局部变量 v。
  • 🟡 pmd:UnusedLocalVariable L58 第 58 行:应避免未使用的局部变量 'w'。 建议: 删除未使用的局部变量 w。
  • 🟡 pmd:LocalVariableCouldBeFinal L59 第 59 行:局部变量 'xx' 可声明为 final。 建议: 变量 xx 声明后未再赋值,改为 final int xx = 24;。
  • 🟡 pmd:LocalVariableCouldBeFinal L60 第 60 行:局部变量 'yy' 可声明为 final。 建议: 变量 yy 声明后未再赋值,改为 final int yy = 25;。

AI 审查 · 4 条建议

  • 🔴 [AI] [bug] output-before-forward L33 jsp:forward 之前已经输出响应内容,可能导致转发失败 第 23-31 行产生的 HTML 注释、div 和 out.println 输出都会先写入响应缓冲区;随后第 33 行才执行 jsp:forward。若缓冲区在转发前被提交,容器会抛出 IllegalStateException;即使未提交,之前输出也可能被丢弃或导致预期外的页面行为。 建议: 不要在 JSP 中直接做转发。将前置判断与转发逻辑放到 Servlet/Filter 中,通过 RequestDispatcher 转发;如果必须在 JSP 中处理,应确保转发发生在任何输出之前。
  • 🟡 [AI] [design] dead-inline-script L8 整段内联脚本为死代码 第 8-19 行的 <script> 中,doMore 未被任何地方调用,doStuff 只被 doMore 引用;如果没有外部脚本通过全局函数名调用这两个函数,整段脚本实际不可达。静态检查只报告了 doMore 未使用,未指出 doStuff 也随之为死代码。 建议: 确认无外部引用后删除整个 <script> 块;如果功能在未来需要使用,应抽取到外部 JS 文件再按需引入。
  • 🟡 [AI] [security] inline-style-csp L24 内联 style 属性削弱内容安全策略(CSP) 第 24 行使用 style="background-color: #f00;" 内联样式。若站点部署 CSP style-src,内联样式可能被阻止或被迫放宽策略;同时硬编码颜色难以复用和维护。 建议: 在外部样式表或页面 <style> 中定义 .error-block { background-color: #f00; },页面使用
  • 🟡 [AI] [security] unescaped-scriptlet-output L30 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))。