Skip to content

B0T1eR/JspCompile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JspCompile - JSP 批量编译工具

初心

我通常使用ASM静态代码审计,因为它只能处理Class字节码。而有些应用系统使用的还是jsp作为脚本页面,所以我想把jsp都编译为class然后静态代码审计。我使用tomcat-jasper作为jsp编译引擎来编译字节码遇到一些问题:

  • jsp编译时候有类加载和资源加载问题,需要给JspC对象设定classpath和web.xml参数。
  • 应用系统jsp中自身可能有语法错误,需要手动修复然后再编译很麻烦。

然后我就想能不能把tomcat-jasper的编译操作封装下,然后再结合Skills技术给ai添加技能点,让ai读取JspC的编译日志然后自动修复jsp文件中的语法错误然后继续编译找问题修复。

0x01 简介 (Introduction)

JspCompile 是一个基于 Apache Tomcat Jasper (JspC) 引擎的轻量级 JSP 编译工具。它专为 Web 项目(尤其是 Legacy 系统)的安全审计和语法检查而设计。

通过全量或增量编译 Web 目录下的 JSP 文件,本工具能快速暴露页面中的 Import 错误、Tag 属性格式问题、类缺失等语法隐患,并生成详细的审计日志。

配合 Skills 使用,它还能实现从“编译 -> 报错 -> 自动修复 -> 再编译”的自动化闭环。

0x02 核心特性 (Features)

  • 全量编译: 递归扫描指定 Web 根目录(uriroot)下的所有 JSP 文件。
  • 指定编译: 支持仅编译用户指定的一个或多个 JSP 文件(逗号分隔)。
  • 智能配置: 自动识别并加载目标目录下的 WEB-INF/web.xml,确保编译上下文正确。
  • 噪声过滤: 智能识别 Fragment 文件(如 .inc, include 目录、_common.jsp),过滤因缺少上下文导致的误报错误。
  • 统计报告: 生成带时间戳的日志文件,文件名包含成功编译的文件数量(如 success_8649.log),直观反映项目健康度。
  • 无损修复: 配合 AI Skill,仅针对语法错误进行微创修复,严禁修改业务逻辑或增删无关代码

0x03 快速开始 (Quick Start)

1. 构建项目 (Build)

使用 Maven 进行构建:

mvn clean package

构建成功后,在 target 目录下会生成可执行的 JAR 包:JspCompiler.jar

2. 命令行使用 (CLI Usage)

基本语法:

java -jar JspCompiler.jar <web_root_path> [jsp_file_path1,jsp_file_path2,...]
  • <web_root_path>: Web 项目的根目录(必须包含 WEB-INF 目录)。
  • [jsp_file_path...]: (可选) 需要编译的特定 JSP 文件相对路径,多个文件用逗号分隔。

示例:

  1. 全量编译整个项目:

    java -jar JspCompiler.jar "F:\projects\my-webapp"
  2. 仅编译特定文件:

    java -jar JspCompiler.jar "F:\projects\my-webapp" "/index.jsp,/login.jsp"

3. 输出结果 (Output)

工具会在 <web_root_path>_jspCompile 目录下生成日志文件:

  • 文件名格式: jspc_compile_YYYYMMDD_HHmmss_success_N.log
  • 内容: 包含详细的错误堆栈信息、编译耗时、成功数量统计。

0x04 Skills 集成 (AI Integration)

本项目包含一个 Skills 配置 (/skills/jsp-compile),专为 AI 辅助jsp编译设计。

Skill 能力:

  1. 自动编译: 根据用户指令自动调用 JspCompiler.jar
  2. 智能分析: 解析日志中的 SEVERE 错误。
  3. 自动修复: 针对 Import 缺失、属性错误等常见问题,自动修改JSP源码。
    • 原则: 严禁修改业务逻辑,仅修复语法错误。
  4. 循环验证: 修复后自动重新编译,确保问题解决。

Skill 脚本位置:

  • 定义文件: skills/jsp-compile/SKILL.md
  • 执行脚本: skills/jsp-compile/scripts/JspCompiler.jar

使用方式:

  1. 将skills目录放在AI IDE的skills技能配置目录下,我这里使用的是windsurf,其他的AI IDE看官方文档可以找到

image-20260225101734756

  1. 在AI IDE中与AI进行对话,不同的AI对于JspCompile技能的执行效果不同。对比执行我发现Gemini和GLM实践效果更好
请你使用jsp-compile技能帮我编译目录 /opt/ecology 下的jsp文件,用中文和我交流

image-20260225102751837

  1. 最后生成的结果在XXX_jspCompile目录下,xxx.log是JspC编译日志,jspc_compile_ai_fix.md是ai修复的日志

image-20260225102950331

About

JspCompile是个基于Tomcat Jasper引擎的轻量级JSP编译工具,它可搭配Skills使用,实现从“编译->报错->自动修复->再编译”的流程。主要针对JSP编译中遇到大量文件出现语法错误问题的解决。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages