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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Web 与安全入门/课时/OWASP 风险
RawBlame
课时目录12 节

Web 与安全入门

  1. 01Web 安全概览
  2. 02OWASP 风险
  3. 03SSL/TLS
  4. 04CORS
  5. 05CSP 内容安全策略
  6. 06服务器安全
  7. 07密码哈希
  8. 08Basic 认证
  9. 09令牌认证
  10. 10Cookie 认证
  11. 11SAML 简介
  12. 12综合练习

OWASP 风险

Top 10 与常见漏洞直觉。

35 分钟

OWASP 风险

OWASP Top 10 是 Web 应用 最常见、影响最大 的风险清单,不是漏洞百科全书,而是 优先级指南。后端开发应能 看到代码或 API 设计就联想到对应条目,并在 Code Review 里主动问一句。

学习目标

  • 说出当前 Top 10 中 与 Java API 最相关的五条 及典型场景
  • 在 Spring / MyBatis 栈里识别注入、越权、错误配置的代码 smell
  • 知道何时深入 spring-boot-essentials 与 oauth-essentials

Top 10 与后端直觉(2021 版框架)

风险一句话Spring 栈常见表现
A01 访问控制失效能调接口 ≠ 有权调缺 @PreAuthorize、仅藏 UI 不校验 API
A02 加密机制失效该加密的地方没加密HTTP 传密码、弱哈希、硬编码 AES key
A03 注入把输入当代码执行SQL 拼接、LDAP/命令注入、不安全反序列化
A04 不安全设计架构层面缺控制无速率限制、无多租户隔离设计
A05 安全配置错误默认配置上线开启 actuator 全开、debug 堆栈回客户端
A06 易受攻击组件依赖有已知 CVE旧版 Spring、Log4j、未跑 mvn dependency-check
A07 身份认证失效登录与会话设计错误弱密码策略、JWT 无过期、session 固定
A08 软件与数据完整性更新链被篡改从不校验的 URL 拉脚本、CI 密钥泄露
A09 日志与监控不足被打了不知道无登录失败告警、无审计谁改了权限
A10 SSRF服务端替攻击者发请求url 参数拉内网 metadata

不必背编号,要背 「这类 bug 在我仓库里长什么样」。

A01 访问控制:最高频后端事故

水平越权:用户 A 改 orderId=123 为 124 读到他人订单。

垂直越权:普通用户调用 /admin/users。

防御习惯:

// 坏:只信路径里的 userId
@GetMapping("/users/{userId}/orders")
List<Order> list(@PathVariable Long userId) { ... }

// 好:与当前登录主体比对
Long current = SecurityContextHolder.getContext()...;
if (!userId.equals(current) && !isAdmin()) throw new AccessDeniedException();

资源级校验应放在 Service 层,不要只依赖 Controller 路径「看起来合理」。

A03 注入:MyBatis 典型坑

<!-- 危险:${} 直接替换,用户输入可改 SQL 结构 -->
<select id="search">SELECT * FROM user WHERE name = '${name}'</select>

<!-- 安全:#{} 预编译参数 -->
<select id="search">SELECT * FROM user WHERE name = #{name}</select>

JPA @Query 里拼 % 也要注意 只用参数绑定。ORM 不是银弹,原生 SQL 片段 仍要人工审查。

A07 认证:与后续课时衔接

  • 密码存储 → sec-hash
  • Cookie / Token → sec-auth-cookie、sec-auth-token
  • 联邦登录 → oauth-essentials、sec-saml

「认证通过」只解决 你是谁;Top 10 里大量事故是 授权(你能干什么) 没做好。

A05 / A06:配置与依赖

Spring Boot 常见误配置:

误配置风险
management.endpoints.web.exposure.include=*actuator 信息泄露
spring.jpa.show-sql=true 上生产SQL 与数据进日志
默认 admin/admin 未改直接沦陷
忽略 Dependabot / OWASP Dependency-Check已知 CVE 长期存在

最小暴露:生产只开 health;敏感端点加 IP 白名单或关闭 web 暴露。

开发流程里怎么落地

  1. PR 模板加一条:「是否涉及用户输入、权限、密钥?」
  2. 静态扫描:SpotBugs、Sonar、dependency-check 进 CI
  3. 威胁建模(轻量):新接口问「攻击者能传什么?能访问谁的数据?」
  4. 对照 sb-validation:输入校验是注入与业务逻辑漏洞的第一道门

练习

  • 在任意开源 Spring 项目 GitHub 搜 ORDER BY ${ 或 like '%${,理解为何危险
  • 列出你当前项目三个 API,分别写「可能的 A01 / A03 场景」
  • 阅读 oauth-security 中与 redirect、token 相关的条目,与 A07 对照

小结

OWASP Top 10 是 Review checklist,不是合规盖章。 下一课从传输层机密性入手:TLS 与 HTTPS。

加载本节练习…
← 上一课Web 安全概览下一课 →SSL/TLS