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):
- A01 - 访问控制失效 (Broken Access Control)
- A02 - 加密机制失效 (Cryptographic Failures)
- A03 - 注入 (Injection)
- A04 - 不安全设计 (Insecure Design)
- A05 - 安全配置错误 (Security Misconfiguration)
- A06 - 易受攻击和过时的组件 (Vulnerable Components)
- A07 - 身份认证失效 (Identification & Authentication Failures)
- A08 - 软件和数据完整性失效 (Software & Data Integrity Failures)
- A09 - 安全日志和监控失效 (Security Logging & Monitoring Failures)
- A10 - 服务端请求伪造 (SSRF)
二、A01 访问控制失效
漏洞描述
用户能访问未授权的资源或功能。比如普通用户访问管理后台、修改他人订单。
典型案例
攻击:
修复
防御原则
- 永远从服务端获取当前用户身份
- 每次请求都做权限校验,不要依赖前端隐藏按钮
- 强制使用最小权限原则
- 拒绝默认允许,默认拒绝
三、A02 加密机制失效
常见问题
- 使用 HTTP(明文传输)
- 弱密码算法(MD5、SHA1)
- 密钥硬编码在代码里
- 敏感数据明文存储
案例:密码存储
问题:MD5 太快,彩虹表秒破。
修复:使用 bcrypt
HTTPS 配置
加密算法选择
| 用途 | 推荐算法 | 不推荐 |
|---|---|---|
| 密码哈希 | bcrypt / Argon2 / scrypt | MD5 / SHA1 / SHA256 |
| 数据加密 | AES-256-GCM | DES / 3DES |
| 数字签名 | Ed25519 / RSA-PSS | RSA-PKCS1 |
| TLS | TLS 1.3 / TLS 1.2 | SSL 3.0 / TLS 1.0 |
四、A03 注入漏洞(最经典)
SQL 注入
漏洞代码
攻击:
最终 SQL:
由于 '1'='1' 恒为真,返回所有用户。
修复:参数化查询
各种语言:
命令注入
漏洞代码
攻击:
修复
XSS(跨站脚本)
反射型 XSS
攻击:
存储型 XSS(更危险)
攻击:评论里写
修复
- 输出编码:HTML 转义
- Content-Security-Policy
- HttpOnly Cookie(防 cookie 窃取)
模板注入(SSTI)
攻击:
修复
五、A04 不安全设计
案例:无密码策略
攻击:用户注册 123456 当密码。
修复
限流设计
业务逻辑漏洞
修复:服务端重新计算价格,不允许客户端传入。
六、A05 安全配置错误
常见配置问题
| 配置 | 错误 | 正确 |
|---|---|---|
| 默认账号 | admin/admin 未改 | 强制首次登录修改 |
| 错误信息 | 显示堆栈给用户 | 只显示友好提示 |
| 目录浏览 | 开启 | 关闭 |
| CORS | Access-Control-Allow-Origin: * | 配置白名单 |
| HTTP 头 | 缺失安全头 | 完整安全头 |
安全 HTTP 头
生产环境检查清单
- 关闭目录浏览
- 修改默认密码
- 禁用调试模式(
DEBUG=False) - 关闭不必要的服务端口
- 删除示例代码
- 配置防火墙
- HTTPS 强制
七、A06 易受攻击和过时的组件
风险
- 框架 / 库的已知漏洞
- 未及时更新
- 供应链攻击
防御
- 定期扫描
- 及时更新
- 依赖锁定
- 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
漏洞扫描平台
- Vulners
- CVE Details
- NVD(美国国家漏洞库)
十四、安全开发流程
SDL(Security Development Lifecycle)
CI/CD 集成安全扫描
十五、应急响应
1. 发现入侵
立即行动:
- 隔离:从网络断开(防止横向移动)
- 取证:不要重启,保存内存快照
- 记录:所有操作写入日志
2. 事件分类
- 数据泄露
- 系统入侵
- 拒绝服务
- 内部滥用
3. 处置流程
4. 报告与改进
写事故复盘报告:
- 时间线
- 根因分析
- 影响范围
- 改进措施
总结
Web 安全不是一次性任务,是持续的过程。
核心原则:
- 零信任:不相信任何输入,不做隐式授权
- 纵深防御:多层防护,即使一层被攻破还有其他层
- 最小权限:每个账号/服务只给必需权限
- 失效安全:出错时拒绝而不是放行
- 可见性:所有操作都有日志,可追溯
学习路径:
- 读 OWASP Top 10 官方文档
- 用 DVWA / WebGoat 靶场练手
- 学一门 WAF 工具
- 考 CISP / CISSP 认证(可选)
安全无小事。一次小漏洞可能导致品牌声誉崩塌、用户数据泄露、法律诉讼。从今天开始,把安全融入开发流程的每一步。
评论
?
参与讨论