CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
网络安全入门/课时/综合练习
RawBlame
课时目录12 节

网络安全入门

  1. 01安全职业与 IT 基础
  2. 02网络与安全基础
  3. 03操作系统加固
  4. 04密码学与 PKI
  5. 05身份与访问控制
  6. 06威胁与攻击向量
  7. 07防御技术与工具
  8. 08事件响应与取证
  9. 09云与虚拟化安全
  10. 10渗透测试入门
  11. 11合规与认证
  12. 12综合练习

综合练习

威胁建模 + 事件响应 Runbook 演练。

40 分钟

综合实战:靶场通关、漏洞复现与平台加固

这一课你将能做到

  1. 独立完成 DVWA 高难度关卡,串联整门课的攻防知识
  2. 在本地环境安全复现一个真实 CVE(Log4Shell),理解依赖漏洞的工程意义
  3. 为 Spring Boot 平台执行一份 20 项安全检查清单并输出加固报告

为什么要学

知识只有串成实战才属于你。这门课你学了侦察、加固、加密、认证、攻击、防御、应急、云与合规——本课用三个综合练习把它们焊在一起:靶场通关练「攻的视角」,CVE 复现练「依赖风险」,平台加固练「守的落地」。这也是你整理安全作品集的起点:一份复现报告 + 一份加固清单,面试时比任何口号都有说服力。

先建立图像

本课的实战闭环:

学攻击(DVWA) ──▶ 理解漏洞机理
     │
学复现(Log4Shell) ──▶ 理解供应链风险:一个依赖 = 全站命门
     │
学加固(Checklist) ──▶ 把防御固化到 CI/CD 与代码评审
     ▼
输出作品集:复现报告 + 加固记录

跟着做

练习一:DVWA 通关(把攻击链走完整)

docker run --rm -it -d -p 80:80 vulnerables/web-dvwa
# Security 等级逐级提升:low → medium → high

每个关卡对照课程模块:

SQL Injection  → cs-threats:参数化为什么根治注入
Brute Force    → cs-defense:为什么登录要限流+锁定
File Upload    → cs-threats:上传校验(白名单+重命名+隔离存储)
File Inclusion → cs-network:路径穿越与配置收敛
CSRF           → cs-identity:SameSite 与 Token 的取舍
Command Injection → cs-os:最小权限让 RCE 无法提权

high 难度下每关都打不动,说明防御到位——把「为什么打不动」写下来,比打穿更有价值。

练习二:本地复现 Log4Shell(CVE-2021-44228)

仅在你自己的 Docker 环境内复现,payload 不指向任何真实外部系统。

# 准备一个含旧版 log4j-core(2.14.1) 的 Spring Boot Demo
# log4j2.xml 保持默认,应用日志会记录用户输入
docker build -t log4shell-lab .
docker run -d -p 8080:8080 log4shell-lab
# 攻击面:任何会被 log4j 记录的输入(User-Agent、搜索框、日志里的用户名)
# 经典 payload 形如:${jndi:ldap://127.0.0.1:1389/Exploit}
# 本地起一个 LDAP 服务模拟(自建测试,不出网)
docker run --rm -p 1389:1389 marcnuri demos...

简化演示(不引入外部 LDAP):

// Demo 接口:把用户输入直接 log.info(out) —— 命中漏洞路径
log.info("search query: {}", userInput);
// userInput = "${jndi:ldap://127.0.0.1:1389/x}" 时,
// log4j 会解析查找表达式并尝试外连 —— 这就是 RCE 的入口
# 验证修复:升级到 log4j-core ≥ 2.17.1 或设置
# -Dlog4j2.formatMsgNoLookups=true(临时缓解)
mvn versions:use-latest-versions -Dincludes=org.apache.logging.log4j
# 复盘三问:哪个依赖带的?怎么发现的?CI 里怎么挡住?

练习三:平台安全加固清单(20 项走一遍)

认证与授权
□ 1. JWT 算法服务端固定,不信任 header 的 alg
□ 2. access token 短期 + refresh 可吊销(Redis 黑名单)
□ 3. 所有管理接口 @PreAuthorize 双重校验(网关+方法级)
□ 4. 登录失败锁定 + 图形/滑块验证码
输入与注入
□ 5. SQL 全参数化,全局 grep 排查 ${} 使用点
□ 6. 所有富文本输出走白名单消毒
□ 7. 文件上传:白名单后缀+魔数校验+重命名+隔离目录
□ 8. SSRF:出站 URL 白名单,禁止访问内网/链路本地地址
传输与存储
□ 9. 全站 HTTPS + HSTS
□ 10. 密码 BCrypt 成本因子 ≥ 10
□ 11. 敏感字段(手机号等)加密存储 + 日志脱敏
□ 12. 生产配置零明文密钥(环境变量/KMS)
接口与可用性
□ 13. 登录/注册/短信接口按 IP+用户限流(429+Retry-After)
□ 14. Actuator 生产关闭或独立端口+认证
□ 15. 错误响应统一脱敏(不回显堆栈/SQL)
□ 16. CORS 白名单精确到域名,禁止 *
审计与响应
□ 17. 安全日志独立落盘:登录成败/鉴权失败/限流触发
□ 18. 日志留存 ≥ 6 个月
依赖与流程
□ 19. CI 集成 dependency-check + SpotBugs-Security,阻断高危
□ 20. 事件响应 Runbook 存在且演练过一次

每项标注:已做 / 未做 / 不适用,未做的排期。这就是一份可交差的加固报告。

练习四(可选):接入漏扫与复测

# 用 OWASP ZAP 对本站本地环境做被动扫描
docker run --rm -u zap -p 8081:8080 -i ghcr.io/zaproxy/zaproxy:stable \
  zap.sh -cmd -port 8081
# 浏览器代理到 8081,正常浏览一遍,查看告警面板
# 把误报与真报分别标注,真报并入加固清单

讲清楚要点

  1. 攻防一体才记得牢:只学防御记不住「为什么」,亲手打一遍 DVWA,每个防御措施都有了对应的攻击画面,知识变成条件反射。
  2. 依赖漏洞是 Java 平台的第一大现实威胁:Log4Shell 的教训不是 log4j 有洞,而是「你不知道自己依赖了什么」。SBOM(软件物料清单)+ CI 扫描是长期解法。
  3. 清单的价值在「可验证」:「注意安全」是口号,「grep 全项目查 ${}」是检查项。把这条课的 20 项变成团队 PR 模板与 CI 规则,安全才落地。
  4. 复现报告是能力证明:CVE 复现报告包含环境、触发步骤、影响分析、修复验证——它同时训练了渗透报告能力(cs-offensive)与应急能力(cs-incident)。
  5. 持续学习路径:DVWA 之后的进阶依次是 PortSwigger Academy(Web 深度)→ VulnHub/HTB(系统渗透)→ 真实 SRC(有授权的赏金)。每一步都有社区与官方文档支撑。

你可能会懵的地方

  • 复现 CVE 需要担心法律风险吗? 在自己 Docker/虚拟机里复现公开 CVE 是标准学习方式,不违法。红线:payload 不指向外部系统、不复现到真实服务、报告不公开含他人系统的细节。

  • DVWA 打穿之后玩什么? Web 方向:PortSwigger Academy 的 LAB(现代框架场景);系统方向:VulnHub 的 Kioptrix/Mr-Robot;综合:HTB Academy 订阅或免费层。按「Web 优先」推进,与你后端主业复利最大。

  • dependency-check 误报多怎么办? 它按 CPE 匹配偏保守。用 NVD API Key 提升准确度、对确认不影响的 CVE 用 suppression 文件标注理由(理由本身就是审计证据)、或叠加 Snyk/Trivy 交叉验证。

  • 20 项清单做不完怎么排优先级? 按暴露面排序:公网可触达 > 认证相关 > 数据保护 > 审计。1/2/3/13/14 五项是底线,其余按迭代排期,每季度复审一次。

  • 怎么把这门课变成作品集? 三份文档:① DVWA 通关笔记(含 high 难度防御分析)② Log4Shell 复现报告 ③ 平台加固报告(20 项清单+前后对比)。开源到 GitHub 并附本课程链接,这就是面试时「你做过什么安全工作」的答案。

错法对照

错法问题正解
只刷通关视频不动手知识不落地每关亲手复现并记录
复现 CVE 用生产环境重大事故风险只在隔离的 Docker/VM 内
清单向标准看齐不验证「已做」其实是自欺每项附验证命令或截图
学完不做输出三个月后遗忘复现报告+加固报告+通关笔记
工具链一次性装完就吃灰防御退化为摆设扫描进 CI,季度复审清单

卡点急救

  1. Log4Shell 复现无反应:确认依赖版本确为受影响区间(2.0-beta9 ~ 2.14.1)、日志级别允许记录该输入、JDK 版本影响 LDAP 利用路径(JDK 6u211+/7u201+/8u191+ 默认禁远程类加载——观察 DNS/连接行为即可证明漏洞存在)。
  2. ZAP 扫描误报淹没:先只开被动扫描熟悉基线,主动扫描限定本机目标;按「确认可利用」过滤告警再决定是否进清单。
  3. 清单 20 项无从下手:先跑一遍自动化(依赖扫描+ZAP 基线)生成现状报告,把其中映射到清单条目的问题列为第一轮整改,其余人工核查。

面试常问

  • 说说你对 Log4Shell 的理解与你们是怎么防的? 机理:log4j2 对日志内容做 ${...} 查找表达式解析,jndi: 协议触发远程类加载导致 RCE。防御:升级 ≥2.17.1(根治)、临时缓解 formatMsgNoLookups、CI 依赖扫描阻断旧版本、SBOM 摸清依赖来源。答出「供应链视角」是加分项。

  • 如果让你负责提升一个 Spring Boot 平台的安全水平,你怎么启动? 先摸底(资产清单+依赖扫描+一次基线漏扫)→ 按风险排序(暴露面优先)→ 快赢项(HTTPS、限流、Actuator 收口、密钥出代码)→ 体系化(CI 安全门禁、安全日志、应急 Runbook)→ 度量与复审(清单季度复核、指标跟踪)。

  • 你如何保持安全知识更新? 订阅漏洞情报(NVD、GitHub Advisory、厂商公告)、跟进 OWASP 项目动态、定期打靶场保持手感、把新漏洞映射到自己技术栈做影响评估。体现的是「流程化跟进」而非「想起来才看」。

自测三问

  1. 不看资料,你能写出 Log4Shell 的 payload 形态与三种缓解措施吗?
  2. 20 项清单里,你认为对自己平台最紧急的 5 项是哪些?为什么?
  3. 复现报告需要包含哪几个部分?

小结一句话

攻防串成闭环、漏洞亲手复现、防御固化进 CI——这门课的终点不是「学完了」,而是你带着三份作品文档,进入了「持续验证」的安全工程状态。

延伸

  • OWASP DVWA 官方仓库
  • OWASP Dependency-Check
  • PortSwigger Web Security Academy
  • 结课:回到 /roadmaps/cyber-security 标记完成全部节点,开启下一阶段学习。
加载本节练习…
← 上一课合规与认证