Web 应用常见漏洞与防御:OWASP Top 10 实战讲解

据 Akamai 报告,2026 年 Web 应用攻击同比增长 40%,其中注入攻击和身份认证失效占比最高。无论你是开发者还是运维,了解 Web 应用常见漏洞都是必修课。本文基于 OWASP Top 10(2021 版),通过真实案例 + 代码讲解,带你建立完整的 Web 安全防护意识。

一、什么是 OWASP

OWASP(Open Worldwide Application Security Project)是全球最权威的 Web 安全组织,定期发布 Top 10 漏洞榜单,代表最常见、最危险的 Web 安全风险。

OWASP Top 10 (2021):

  1. A01 - 访问控制失效 (Broken Access Control)
  2. A02 - 加密机制失效 (Cryptographic Failures)
  3. A03 - 注入 (Injection)
  4. A04 - 不安全设计 (Insecure Design)
  5. A05 - 安全配置错误 (Security Misconfiguration)
  6. A06 - 易受攻击和过时的组件 (Vulnerable Components)
  7. A07 - 身份认证失效 (Identification & Authentication Failures)
  8. A08 - 软件和数据完整性失效 (Software & Data Integrity Failures)
  9. A09 - 安全日志和监控失效 (Security Logging & Monitoring Failures)
  10. A10 - 服务端请求伪造 (SSRF)

二、A01 访问控制失效

漏洞描述

用户能访问未授权的资源或功能。比如普通用户访问管理后台、修改他人订单。

典型案例

攻击:

修复

防御原则

  • 永远从服务端获取当前用户身份
  • 每次请求都做权限校验,不要依赖前端隐藏按钮
  • 强制使用最小权限原则
  • 拒绝默认允许,默认拒绝

三、A02 加密机制失效

常见问题

  • 使用 HTTP(明文传输)
  • 弱密码算法(MD5、SHA1)
  • 密钥硬编码在代码里
  • 敏感数据明文存储

案例:密码存储

问题:MD5 太快,彩虹表秒破。

修复:使用 bcrypt

HTTPS 配置

加密算法选择

用途推荐算法不推荐
密码哈希bcrypt / Argon2 / scryptMD5 / SHA1 / SHA256
数据加密AES-256-GCMDES / 3DES
数字签名Ed25519 / RSA-PSSRSA-PKCS1
TLSTLS 1.3 / TLS 1.2SSL 3.0 / TLS 1.0

四、A03 注入漏洞(最经典)

SQL 注入

漏洞代码

攻击:

最终 SQL:

由于 '1'='1' 恒为真,返回所有用户。

修复:参数化查询

各种语言:

命令注入

漏洞代码

攻击:

修复

XSS(跨站脚本)

反射型 XSS

攻击:

存储型 XSS(更危险)

攻击:评论里写

修复

  1. 输出编码:HTML 转义
  1. Content-Security-Policy
  1. HttpOnly Cookie(防 cookie 窃取)

模板注入(SSTI)

攻击:

修复

五、A04 不安全设计

案例:无密码策略

攻击:用户注册 123456 当密码。

修复

限流设计

业务逻辑漏洞

修复:服务端重新计算价格,不允许客户端传入。

六、A05 安全配置错误

常见配置问题

配置错误正确
默认账号admin/admin 未改强制首次登录修改
错误信息显示堆栈给用户只显示友好提示
目录浏览开启关闭
CORSAccess-Control-Allow-Origin: *配置白名单
HTTP 头缺失安全头完整安全头

安全 HTTP 头

生产环境检查清单

  • 关闭目录浏览
  • 修改默认密码
  • 禁用调试模式(DEBUG=False)
  • 关闭不必要的服务端口
  • 删除示例代码
  • 配置防火墙
  • HTTPS 强制

七、A06 易受攻击和过时的组件

风险

  • 框架 / 库的已知漏洞
  • 未及时更新
  • 供应链攻击

防御

  1. 定期扫描
  1. 及时更新
  1. 依赖锁定
  1. SCA 工具
  • Snyk
  • Dependabot(GitHub 内置)
  • OWASP Dependency-Check

八、A07 身份认证失效

常见问题

  • 弱密码允许
  • 无登录失败锁定
  • Session ID 在 URL 中泄露
  • JWT 过期时间过长 / 不刷新

修复方案

Session 安全

多因素认证

推荐 TOTP:

JWT 安全

九、A08 软件和数据完整性失效

案例:不安全的反序列化

攻击:

修复

供应链安全

  • 校验第三方库签名
  • 校验下载文件的哈希
  • 使用受信源(npm 官方、PyPI 官方)

十、A09 安全日志和监控失效

应该记录的事件

  • 登录失败 / 成功
  • 权限校验失败
  • 异常流量
  • 关键操作(支付、改密)

日志规范

集成 SIEM

  • ELK Stack(Elasticsearch + Logstash + Kibana)
  • Splunk
  • Grafana Loki
  • 阿里云日志服务 / 腾讯云 CLS

告警规则

十一、A10 服务端请求伪造(SSRF)

漏洞描述

服务端未经严格校验就访问用户提供的 URL。

案例

攻击:

修复

十二、其他重要漏洞

CSRF(跨站请求伪造)

防御:

文件上传漏洞

修复:

XXE(XML 外部实体)

修复:禁用外部实体

十三、防御工具与平台

WAF(Web 应用防火墙)

  • ModSecurity(开源)
  • Cloudflare WAF
  • 阿里云 WAF / 腾讯云 WAF
  • 长亭雷池(国产开源)

SAST(静态扫描)

  • SonarQube
  • Semgrep
  • Bandit(Python)

DAST(动态扫描)

  • OWASP ZAP(免费)
  • Burp Suite
  • Nessus

漏洞扫描平台

十四、安全开发流程

SDL(Security Development Lifecycle)

CI/CD 集成安全扫描

十五、应急响应

1. 发现入侵

立即行动:

  • 隔离:从网络断开(防止横向移动)
  • 取证:不要重启,保存内存快照
  • 记录:所有操作写入日志

2. 事件分类

  • 数据泄露
  • 系统入侵
  • 拒绝服务
  • 内部滥用

3. 处置流程

4. 报告与改进

写事故复盘报告:

  • 时间线
  • 根因分析
  • 影响范围
  • 改进措施

总结

Web 安全不是一次性任务,是持续的过程。

核心原则:

  1. 零信任:不相信任何输入,不做隐式授权
  2. 纵深防御:多层防护,即使一层被攻破还有其他层
  3. 最小权限:每个账号/服务只给必需权限
  4. 失效安全:出错时拒绝而不是放行
  5. 可见性:所有操作都有日志,可追溯

学习路径:

  1. 读 OWASP Top 10 官方文档
  2. 用 DVWA / WebGoat 靶场练手
  3. 学一门 WAF 工具
  4. 考 CISP / CISSP 认证(可选)

安全无小事。一次小漏洞可能导致品牌声誉崩塌、用户数据泄露、法律诉讼。从今天开始,把安全融入开发流程的每一步。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论