Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计通过

java-file-upload-auditJava file upload 审核

Agent Skill

用于辅助 Java 项目开发、面向对象设计、Spring 生态、Maven 或 Gradle 依赖和后端工程实践。它适合让 Agent 分析类结构、设计接口、整理服务分层、生成测试或检查常见代码坏味道。使用时需要结合项目已有架构、包结构和依赖版本,不应只按通用教程改代码;涉及数据库、事务、并发或框架配置时,应先确认运行环境和回归测试范围。

总安装

489

周安装

21

GitHub Stars

632

下载量

171
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:java-file-upload-audit(Java file upload 审核)
来源仓库:https://github.com/ruoji6/java-audit-skills
仓库路径:skills/java-file-upload-audit
安装命令:
npx skills add https://github.com/ruoji6/java-audit-skills --skill java-file-upload-audit
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/ruoji6/java-audit-skills --skill java-file-upload-audit

简介

用于辅助 Java 项目开发、面向对象设计和 Spring 生态集成。

  • 适合分析类结构、设计接口、整理服务分层或生成测试代码。
  • 使用时需结合项目已有架构、包结构和依赖版本,避免仅按教程修改代码。
  • 涉及数据库、事务或并发配置时,应先确认运行环境和回归测试范围。
  • java-file-upload-audit 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Java 文件上传漏洞审计工具

检查 Java Web 项目源码,识别文件上传实现并检测上传相关漏洞(任意文件上传、路径穿越、文件覆盖、Web 根目录可执行等)。

核心要求

此技能必须完整分析所有上传相关代码,不允许省略。

  • ✅ 识别所有上传入口点(ServletFileUpload / MultipartFile / transferTo / FileItem)
  • ✅ 标注每个上传点的保存路径、文件名来源与校验策略
  • ✅ 检测所有潜在的上传漏洞模式(类型校验缺失、路径穿越、Web 根目录写入、文件覆盖)
  • ✅ 当源码不可用时必须反编译,并输出反编译文件清单(文件名 + 位置)
  • ❌ 禁止省略任何上传入口
  • ❌ 禁止跳过反编译步骤

漏洞分级标准

详见 SEVERITY_RATING.md

  • 漏洞编号格式: {C/H/M/L}-UPLOAD-{序号}
  • 严重等级 = f(可达性 R, 影响范围 I, 利用复杂度 C)
  • Score = R × 0.40 + I × 0.35 + C × 0.25,映射 CVSS 3.1
前缀CVSS 3.1含义
🔴 C9.0-10.0可直接导致系统沦陷
🟠 H7.0-8.9可造成重大损害
🟡 M4.0-6.9可造成一定损害
🔵 L0.1-3.9安全加固项

技能协作流程(CRITICAL)

java-file-upload-audit 必须在 java-route-mapper 之后执行,基于已梳理的路由信息进行审计。

┌─────────────────────────────────────────────────────────────────┐
│                    完整审计流程                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [步骤1] java-route-mapper                                      │
│     │                                                           │
│     │ 输出:                                                    │
│     │ ├─ 所有 HTTP 路由列表                                     │
│     │ ├─ 每个路由的参数定义                                     │
│     │ │   ├─ 参数名、类型                                       │
│     │ │   └─ JSON 内部字段                                      │
│     │ └─ Burp Suite 请求模板                                    │
│     │                                                           │
│     ↓                                                           │
│  [步骤2] java-file-upload-audit(本技能)                       │
│     │                                                           │
│     │ 输入:java-route-mapper 的输出                            │
│     │                                                           │
│     │ 执行:                                                    │
│     │ ├─ 快速扫描上传实现                                       │
│     │ ├─ 参数-上传映射分析                                      │
│     │ ├─ 校验逻辑与保存路径分析                                 │
│     │ └─ 执行条件分析                                           │
│     │                                                           │
│     ├─── 需要深入追踪 ───→ java-route-tracer                    │
│     │                           │                               │
│     │    ←── 返回调用链信息 ────┘                               │
│     │                                                           │
│     ↓                                                           │
│  [步骤3] 输出综合审计报告                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

输入依赖(来自 java-route-mapper)

在开始审计前,必须先检查是否已有 java-route-mapper 的输出文件:

{project_name}_audit/
├── route_mapper/
│   ├── {project_name}_route_mapper_{timestamp}.md    ← 主索引(先读此文件定位模块详情)
│   ├── {module_name}/
│   │   └── {project_name}_module_{module_name}_{timestamp}.md  ← 模块详情
│   └── webservice/
│       └── {project_name}_ws_{service_name}_{timestamp}.md
└── file_upload_audit/
    └── {project_name}_file_upload_audit_{timestamp}.md  ← 本技能输出

如果 route_mapper 输出不存在,建议先运行:

Skill(skill="java-route-mapper", args="--project {project_path}")

从 route_mapper 获取的关键信息

信息用途
路由路径定位上传 Controller/Servlet 入口
参数名 + 类型识别 MultipartFile / FileItem / fileName 参数
JSON 内部字段识别嵌套上传参数
参数用途描述判断是否用于文件名或保存路径

工作流程(三阶段)

阶段1: 快速扫描(优先执行)

目标:快速定位上传相关代码,不遗漏关键点。

# 1.1 Servlet/Commons FileUpload
rg -n "ServletFileUpload|DiskFileItemFactory|FileItem|isMultipartContent" --glob="*.java"

# 1.2 Spring Boot MultipartFile
rg -n "MultipartFile|@RequestParam\\(\"file\"\\)|transferTo\\(" --glob="*.java"

# 1.3 文件名/路径相关
rg -n "getOriginalFilename|getName\\(\\)|getRealPath\\(\"/uploads\"\\)|uploadDir" --glob="*.java"
rg -n "new File\\(|Paths\\.get\\(|Path\\.of\\(|File\\.separator" --glob="*.java"

# 1.4 上传接口路由
rg -n "@PostMapping\\(|@RequestMapping\\(.*upload|/upload" --glob="*.java"

输出:高危文件清单(按优先级排序)

优先级文件类型审计重点
P0*Controller.java / *Servlet.java 中包含 upload 逻辑MultipartFile/FileItem
P1*Service.java, *ServiceImpl.java文件保存路径/重命名
P2*Util.java, *Storage.java, *File*.java通用存储封装
P3*Config.java, application.yml文件大小/目录配置

阶段2: 参数-上传映射分析

基于 route_mapper 输出,检查每个上传参数是否影响文件名或保存路径。

2.1 高危参数识别

参数来源参数名类型漏洞等级
@RequestParamfileMultipartFile高危 - 直接上传
FileItemitemFileItem高危 - fileName 可控
@RequestParamfileNameString高危 - 文件名拼接
JSONupload.pathString高危 - 目录拼接

2.2 参数追踪(示例)

HTTP 参数: file (MultipartFile)
    ↓
Controller.handleFileUpload(file)
    ↓
file.getOriginalFilename()  ← 文件名来源
    ↓
Paths.get(uploadDir).resolve(fileName)
    ↓
file.transferTo(filePath)   ← 上传写入点

2.3 上传点检查

对每个上传写入点,检查:

  1. 文件名来源是否可控?

- getOriginalFilename() / item.getName() → 高危 - 服务器生成随机名 → 低危

  1. 是否有路径规范化与目录限制?

- getCanonicalPath() + 固定上传目录 → 较安全 - 直接拼接路径 → 高危

  1. 是否做类型/内容校验?

- 白名单扩展名/Content-Type/魔数校验 → 安全 - 仅检查非空或无校验 → 高危

  1. 上传目录是否在 Web 根目录?

- getRealPath("/uploads") / /uploads/ → 高危 - 非 Web 可访问目录 → 较安全

阶段3: 深入检查与报告

当上传逻辑复杂或参数多层传递时,调用 java-route-tracer 获取完整调用链并补充校验路径分析。


上传实现识别(来自 Notion 资料的关键点)

1) Servlet/Commons FileUpload

识别特征:

  • ServletFileUpload.isMultipartContent(request)
  • DiskFileItemFactory / ServletFileUpload
  • upload.parseRequest(request)List<FileItem>
  • item.getName() 作为文件名
  • item.write(storeFile) 写入文件
  • getServletContext().getRealPath("/uploads") 作为保存目录

Notion 记录要点:

  • 示例未校验表单字段名,name="file" 不会被校验
  • 仅设置了大小上限(如 upload.setSizeMax(5MB)),未见扩展名/类型/路径校验。

2) Spring Boot MultipartFile

识别特征:

  • @RequestParam("file") MultipartFile file
  • file.getOriginalFilename()
  • file.transferTo(filePath)
  • 固定上传目录 uploadDir = "/uploads/"

Notion 记录要点:

  • @RequestParam("file") 会校验表单字段名,需要 name="file"
  • 示例未见文件名净化、类型白名单或目录隔离。

详细检测规则参见 UPLOAD_RULES.md


反编译阶段(CRITICAL)

当源码不可用时,必须使用 CFR 反编译器反编译上传相关类(详见 java-shared/DECOMPILE_STRATEGY.md)。

反编译工具调用

# 反编译单个上传相关类
java -jar {CFR_JAR} /path/to/UploadController.class --outputdir {output_path}/decompiled

# 反编译上传相关目录
find /path/to/WEB-INF/classes/com/example/upload -name "*.class" | xargs java -jar {CFR_JAR} --outputdir {output_path}/decompiled

# 反编译多个指定文件
java -jar {CFR_JAR} /path/to/UploadController.class /path/to/FileStorageService.class /path/to/UploadUtil.class --outputdir {output_path}/decompiled

必须反编译的类

类型匹配模式目的
Controller/Servlet*Upload*Controller.class, *Servlet.class提取上传入口
Service/Storage*Storage*.class, *FileService*.class追踪保存路径
工具类*UploadUtil*.class, *FileUtil*.class查找通用校验
配置类*Config*.class获取上传目录/大小限制

反编译输出要求:

  • 输出“反编译文件清单”,包含原始文件名与反编译输出路径
  • 反编译文件路径需可定位到具体目录

执行条件分析(CRITICAL - 避免误报)

发现上传逻辑后,必须检查该逻辑是否真的会被执行!

检查项说明影响
权限校验仅管理员可访问影响可利用性
参数校验字段名/类型/大小校验降低漏洞可利用性
目录限制固定上传目录降低路径穿越
可访问性上传目录是否可 Web 访问决定是否可执行

结论分级必须标注:✅ 已确认可利用 / ⚠️ 待验证 / ❌ 不可利用 / 🔍 环境依赖


报告生成

输出单个综合审计报告文件:

{project_name}_audit/file_upload_audit/
└── {route_name}/
    └── {project_name}_file_upload_audit_{timestamp}.md

路由名说明:

  • 路由名从路由路径提取,去掉前缀斜杠和特殊字符
  • 例如:/api/file/uploadapi_file_upload

输出格式

严格按照 references/OUTPUT_TEMPLATE.md 中的填充式模板生成输出文件。

  • 文件名格式: {project_name}_file_upload_audit_{YYYYMMDD_HHMMSS}.md
  • 不得修改模板结构、不得增删章节、不得调整顺序
  • 所有【填写】占位符必须替换为实际内容
  • 通用规范参考: java-shared/OUTPUT_STANDARD.md

审计检查清单(防遗漏)

代码分析检查

  • 所有上传入口已分析(Servlet/MultipartFile)
  • 每个上传点均标注文件名来源与保存路径
  • 目录与访问控制已分析

反编译检查

  • 源码不可用时已反编译
  • 反编译文件清单已输出(文件名 + 位置)

报告完整性检查

  • 综合审计报告已生成,且通过 OUTPUT_TEMPLATE.md 末尾的自检清单

参考资料

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.45%
按下载量换算61

Claude

31.93%
按下载量换算55

Cursor

17.93%
按下载量换算31

Gemini CLI

9.49%
按下载量换算16

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills