Web 信息安全:OWASP Top 10 与防御实战

FreeGuideOnline 最新 2026-06-12

Web 安全基础与渗透测试入门

Web 信息安全:OWASP Top 10 与防御实战


前言

Web 应用已成为企业与用户交互的核心平台,也是攻击者最常盯上的目标。无论你是开发人员、运维工程师还是安全爱好者,理解常见 Web 漏洞的原理与防御手段都是必备技能。本教程以 OWASP Top 10(2021 版)为主线,结合渗透测试的基础思路,帮助你从零构建攻防思维。


什么是 OWASP Top 10?

OWASP(Open Web Application Security Project)是一个开源的 Web 应用安全研究组织。其每 3~4 年发布的 Top 10 Web 应用安全风险 报告,汇总了当前最严重、最常见的 Web 漏洞类型,是 Web 安全的底层知识框架。

2021 版 OWASP Top 10 列表:

  1. A01:2021 – 访问控制失效
  2. A02:2021 – 加密机制失效
  3. A03:2021 – 注入
  4. A04:2021 – 不安全设计
  5. A05:2021 – 安全配置错误
  6. A06:2021 – 易受攻击和过时的组件
  7. A07:2021 – 认证与授权失败
  8. A08:2021 – 软件与数据完整性故障
  9. A09:2021 – 安全日志与监控故障
  10. A10:2021 – 服务端请求伪造(SSRF)

接下来逐一拆解每类风险,并讲解攻击原理与防御要点。


A01:访问控制失效

访问控制决定了“谁可以做什么”。失效时,攻击者可能越权访问他人数据、修改权限甚至接管账户。

典型场景:

  • 水平越权:普通用户 A 修改请求中的 user_id 参数为 B,直接查看或修改 B 的数据。
  • 垂直越权:低权限用户通过隐藏 URL(如 /admin)访问管理功能。
  • 直接对象引用:通过猜测资源 ID(如 /invoice/1024.pdf)访问无授权保护的文件。

攻击思路(示例):

  1. 登录普通用户,拦截请求。
  2. 修改请求中的 ID 或角色参数。
  3. 重放请求,观察是否返回他人数据。

防御要点:

  • 服务端强制校验:绝不可仅依赖前端隐藏菜单。
  • 使用基于角色的访问控制(RBAC)或基于属性的访问控制(ABAC)。
  • 默认拒绝:未明确授权即禁止访问。
  • 对每个请求验证资源所有权。

A02:加密机制失效

并非单纯指加密算法的破解,更常见的是:敏感数据未加密、使用弱加密、密钥管理混乱、传输过程泄露等。

常见问题:

  • HTTP 明文传输登录凭证、会话 Cookie。
  • 数据库明文存储密码。
  • 使用已废弃的算法(如 MD5、SHA1)、硬编码密钥。
  • 启用过时的 TLS 版本(如 TLS 1.0)。

攻击示例:

  • 通过中间人攻击抓取明文密码。
  • 拖库后直接使用泄露的明文密码撞库。

防御要点:

  • 强制 HTTPS,设置 HSTS 头。
  • 密码存储使用强哈希函数(如 bcrypt、Argon2),加盐。
  • 敏感数据加密存储(如 AES-GCM),密钥由密钥管理服务(KMS)管理。
  • 禁用老旧加密套件,定期更新证书。

A03:注入

注入漏洞是用户提供的数据被当作指令执行的结果。最常见的是 SQL 注入,此外还有命令注入、LDAP 注入等。

原理演示(SQL 注入):

-- 原始查询语句
SELECT * FROM users WHERE username = ‘$user AND password = ‘$pass;
-- 攻击者输入用户名: admin’ --
-- 最终查询变为
SELECT * FROM users WHERE username = 'admin' --' AND password = '';

-- 将后续语句注释掉,绕过密码验证。

攻击技巧:

  • 联合查询注入:UNION SELECT ... 提取其他表数据。
  • 盲注:通过布尔或时间响应推断数据。
  • 堆叠查询:多条语句执行(如 ; DROP TABLE users)。

防御要点:

  • 永远不要拼接 SQL,使用参数化查询(预编译语句)。
  • 存储过程不能完全替代参数化。
  • 白名单校验输入,例如当只能为数字时强制类型转换。
  • 最小化数据库账户权限,禁用不必要的命令。

A04:不安全设计

这是一个相对广泛的风险类别,强调在设计阶段就引入安全缺陷。例如缺少速率限制、业务流程缺陷、错误的安全预设等。

实例:

  • 密码重置流程仅需回答弱安全问题(如“你最喜欢的颜色”)。
  • 电商网站允许负数数量下单。
  • 无限制的 API 调用,导致资源滥用。

防御要点:

  • 开展威胁建模(如 STRIDE)在设计阶段识别风险。
  • 引入安全需求,例如关键操作需要二次确认。
  • 使用安全设计模式:深度防御、最小权限、失效安全默认。
  • 编写安全用户故事,将安全融入开发流程。

A05:安全配置错误

服务器、框架、库、容器等的不安全默认配置,或是多余的功能、默认账号未修改,都会给攻击者可乘之机。

典型情况:

  • 应用目录列表开启,泄露文件结构。
  • 默认后台路径(如 /admin)未更改,且使用默认密码。
  • 错误消息显示堆栈跟踪,泄露技术栈信息。
  • 不必要的 HTTP 方法开启(如 PUT、DELETE)。
  • 云存储桶公开访问。

防御要点:

  • 制定标准化的安全加固基线(参考 CIS Benchmarks)。
  • 自动化配置检查工具(如 OpenSCAP、云原生安全扫描)。
  • 删除示例代码、默认账户、不必要的功能。
  • 返回给客户端的安全头设置完整(CSP、X-Content-Type-Options 等)。

A06:易受攻击和过时的组件

当应用使用了含有已知漏洞的库、框架或插件,且未及时更新,就会陷入被动。

真实案例:

  • Equifax 数据泄露事件:未修补 Apache Struts2 漏洞。
  • Log4Shell 漏洞(CVE-2021-44228):影响大量使用 Log4j2 的应用。

防御要点:

  • 使用软件组成分析(SCA)工具(如 OWASP Dependency-Check、Snyk)持续扫描依赖。
  • 仅从官方源获取组件,校验签名。
  • 建立补丁管理流程,根据风险等级优先升级。
  • 移除不再维护的组件。

A07:认证与授权失败

专注于身份验证与登录管理的缺陷,常涉及凭证暴力破解、会话管理漏洞等。

漏洞场景:

  • 登录接口无限尝试(无账户锁定或验证码)。
  • 弱密码策略,允许 123456
  • 会话 ID 可预测或未在登录后重置。
  • 未使用安全的 Cookie 属性(如 HttpOnlySecureSameSite)。

攻击方式:

  • 利用自动化工具(如 Hydra)暴力破解弱口令。
  • 通过 XSS 获取会话 Cookie 进行会话劫持。

防御要点:

  • 多因素认证(MFA)作为标配。
  • 实现账户锁定、速率限制、强密码策略。
  • 会话管理:使用强随机 ID,登录后生成新会话,设置合适超时。
  • 安全退出:使所有会话失效。

A08:软件与数据完整性故障

当应用依赖未经完整性验证的软件更新、关键数据或 CI/CD 管道时,可能被植入恶意代码。

典型问题:

  • 从不受信源的 CDN 加载 JS 库,且未做完整性校验(未用 SRI)。
  • 反序列化不可信数据,导致远程代码执行(如 Java、Python 的反序列化漏洞)。
  • CI/CD 管道被篡改,导致代码或镜像被恶意修改。

防御要点:

  • 使用子资源完整性(SRI)标签:<script src="..." integrity="sha384-..."></script>
  • 对序列化数据进行数字签名或优先选用纯数据格式(如 JSON)。
  • 对 CI/CD 流程进行访问控制,审核制品签名。
  • 使用软件物料清单(SBOM)追踪组件来源。

A09:安全日志与监控故障

日志记录不全、未监控或未告警,导致入侵者长期潜伏而未被发现。这也是法规合规(如 GDPR)的常见违规项。

常见疏漏:

  • 未记录登录失败、敏感操作(如修改权限)。
  • 日志存储在本地,被攻击者清除。
  • 没有实时监控和告警。

防御要点:

  • 记录所有认证、授权、输入验证错误、敏感操作。
  • 日志包含足够的上下文但不记录密码等敏感数据。
  • 将日志集中到安全的 SIEM 系统,设置告警规则。
  • 与事件响应流程对接,定期演练。

A10:服务端请求伪造(SSRF)

攻击者诱导服务器向内部网络或其他外部系统发起恶意请求,常用于绕过防火墙、打穿内网。

攻击示例: 某网站读取远程图片功能提供参数 url=http://external.com/image.jpg。攻击者将其改为:

url=http://169.254.169.254/latest/meta-data/