CSPF-Founder/java-owasp-course
GitHub: CSPF-Founder/java-owasp-course
一套基于 OWASP Top 10:2025 的 Java 安全编码课程,通过真实漏洞代码案例教授开发者如何识别和修复常见安全漏洞。
Stars: 0 | Forks: 0
# OWASP Top 10 (2025) - Java 安全编码课程
本课程通过取自
Cyber Security & Privacy Foundation 开发的 [Java Vulnerable Lab](https://github.com/CSPF-Founder/JavaVulnerableLab) 中的**真实漏洞代码**,教授 OWASP Top 10:2025。
它取代了 [Java Security Course](https://github.com/CSPF-Founder/JavaSecurityCourse),
后者是一个基于相同实验室但涵盖较早版本 OWASP Top 10 的早期视频课程。
# 第 1 部分 - 课程
## 从这里开始
整个课程是 [`pdf/`](pdf/) 文件夹中的一组 PDF 文件,每个主题一份。可以在任何设备的任何 PDF 阅读器中打开它们。无需设置、无需服务器,也无需安装任何东西。
按顺序阅读:首先是概述,然后是 A01 到 A10。
| # | 主题 | PDF | 涵盖内容 |
|---|-------|-----|----------------|
| 0 | 概述 | [概述](pdf/00-owasp-top10-overview.pdf) | 2025 年列表,自 2021 年以来的变化,类别重叠的原因,然后是每个类别的单张幻灯片 |
| A01 | 失效的访问控制 | [PDF](pdf/A01-broken-access-control.pdf) | IDOR、路径遍历、缺少功能级别检查、JWT 篡改、开放重定向、SSRF、CSRF |
| A02 | 安全配置错误 | [PDF](pdf/A02-security-misconfiguration.pdf) | 调试模式、实时安装程序、默认凭据、安全标头、目录列表、XXE |
| A03 | 软件供应链故障 | [PDF](pdf/A03-software-supply-chain.pdf) | 过时的依赖项 (`pom.xml`)、EOL 运行时、Log4Shell、SCA、SBOM |
| A04 | 加密机制失效 | [PDF](pdf/A04-cryptographic-failures.pdf) | 无盐 MD5、明文密码、存储 CVV |
| A05 | 注入 | [PDF](pdf/A05-injection.pdf) | SQL 注入、跨站脚本攻击 (XSS)、OS 命令注入 |
| A06 | 不安全的设计 | [PDF](pdf/A06-insecure-design.pdf) | 不安全的密码恢复、无限制上传、安全检查的客户端强制执行 |
| A07 | 身份验证失效 | [PDF](pdf/A07-authentication-failures.pdf) | 无锁定/枚举、未经核实的密码更改、通过 URL 重写进行的会话固定、客户端密钥 |
| A08 | 软件或数据完整性失效 | [PDF](pdf/A08-software-data-integrity.pdf) | 导致 RCE 的不安全反序列化、未经验证加载的第三方脚本 |
| A09 | 安全日志记录和监控失效 | [PDF](pdf/A09-logging-alerting.pdf) | 无审计追踪、日志注入、日志中的敏感数据 |
| A10 | 异常条件处理不当 | [PDF](pdf/A10-mishandling-exceptions.pdf) | 吞没异常时的故障开放 (Fail-open)、不完整的回滚导致状态损坏 |
## 各主题的结构
1. **概念** - 该类别背后的核心思想。
2. 对于每个示例:**漏洞代码**(直接取自实验室) -> **如何被利用** -> **修复方法**。
3. **开发者检查清单**以及相关类别的交叉引用。
## 发生了什么变化:2021 年到 2025 年
- 两个新增/扩展的类别:**A03 软件供应链故障**(扩展了旧的“易受攻击和过时的组件”)和**A10 异常条件处理不当**(全新)。
- **SSRF** 被并入**A01 失效的访问控制**。
- 重命名:A07 -> “身份验证失效”,A09 -> “安全日志记录和监控失效”。
- 安全配置错误上升至第 2 位;注入下降至第 5 位。
## 安全警告
Java Vulnerable Lab 是故意设计为不安全的。只能在隔离的 VM 或 container 中运行它,**切勿**在生产主机或公共互联网上运行。
# 第 2 部分 - 处理演示文稿
*仅在您需要进行现场演示或编辑课程时需要。如果您只是想阅读它,第 1 部分就足够了。*
第 1 部分中的每个 PDF 都是从此文件夹中匹配的独立
[reveal.js](https://revealjs.com) HTML 演示文稿导出的,例如
`A01-broken-access-control.html` 生成 `pdf/A01-broken-access-control.pdf`。reveal.js 和
每张屏幕截图都被内置在 `assets/` 下,因此这些演示文稿和 PDF 导出可以在完全没有网络访问的情况下离线工作。
## 从 HTML 进行现场演示
在浏览器中打开任何演示文稿,或打开 `index.html` 以获取链接所有演示文稿的登录页面。
- 方向键 / 空格键:导航
- `S`:演讲者备注
- `F`:全屏
- `Esc` 或 `O`:幻灯片概览
- `?`:键盘帮助
从 HTML 而非 PDF 进行演示,您可以获得演讲者备注、幻灯片概览和进度条。PDF 没有这些功能。
## 重新导出 PDF
**脚本方式:**运行 `./export-pdf.sh` 将每个演示文稿渲染到 `pdf/` 中。如果已安装,它会使用
[`decktape`](https://github.com/astefanutti/decktape),否则使用无头
Chrome/Chromium。有关安装提示,请参阅脚本头部。`render-pdf.js` 通过 puppeteer 处理单个演示文稿,这对于大型演示文稿来说更可靠。
**手动方式(无需工具):**在演示文稿 URL 后附加 `?print-pdf`,然后打印 -> 另存为 PDF
(边距:无,背景图形:开启)。
## 检查幻灯片溢出
在编辑幻灯片正文之后,以及**在**重新导出之前:
```
NODE_PATH=$(npm root -g)/decktape/node_modules node check-overflow.js
```
它会根据 reveal.js 画布测量每张幻灯片,并在任何溢出的幻灯片上以非零状态退出。这很重要,因为版权行是一个绝对定位的覆盖层,因此内容过满的幻灯片既不会被裁剪也不会滚动。无论是在屏幕上还是在 PDF 中,它都会悄悄地绘制在版权行的*下方*,并且没有任何信号提示。
## 重新捕获实验室屏幕截图
`assets/shots/` 中的屏幕截图来自运行中的 Java Vulnerable Lab。要刷新它们:
```
LAB=http://HOST:8080/JavaVulnerableLab \
NODE_PATH=$(npm root -g)/decktape/node_modules node capture-lab.js
```
`capture-extra.js` 涵盖了 SSRF 和 Log4Shell 的截图。有两张截图是手动拍摄的,未编写脚本:`design-otp-intercept.png` 需要一个拦截代理,而
`integrity-untrusted-js.png` 需要运行恶意的 widget 服务器。
## 布局
```
*.html the decks, one per category, plus index.html
assets/course.css the shared course theme
assets/reveal/ vendored reveal.js (third-party, see THIRD-PARTY-NOTICES.md)
assets/shots/ screenshots of the running lab
pdf/ exported handout, regenerated by export-pdf.sh
```
## 许可证
版权所有 (C) 2026 Cyber Security & Privacy Foundation。
本仓库中的每一类工作分别适用两种许可证:
- **课程材料**(演示文稿、`assets/course.css`、`assets/shots/`、`pdf/` 和 Markdown 文档)基于 **CC BY-SA 4.0**。可自由分享和改编,包括用于商业用途,前提是您必须注明 Cyber Security & Privacy Foundation 的出处,提供指向该许可证的链接,说明您是否进行了更改,并以相同方式许可您的版本。
- **工具**(`export-pdf.sh`、`render-pdf.js`、`capture-lab.js`、`capture-extra.js`、`cap-one.js`、`check-overflow.js`)基于 **GPL-3.0-or-later**。
`assets/reveal/` 是基于其各自许可证的内置第三方代码,不受上述任何许可证的涵盖。有关详细信息,请参阅 `LICENSE`;有关第三方通知,请参阅 `THIRD-PARTY-NOTICES.md`。
标签:CISA项目, JS文件枚举, MITM代理, OWASP Top 10, StruQ, Web安全, 后端开发, 多模态安全, 安全培训, 安全编码, 数据可视化, 漏洞复现, 蓝队分析