Web 安全入门:OWASP Top 10 速览
Web 安全入门:OWASP Top 10 速览
站长OWASP Top 10 是业界公认的 Web 应用十大风险清单。刚接触安全时最容易被那些缩写劝退,所以这一篇尽量用「人话」讲清楚每一类。
1. 失效的访问控制
是什么:该拦的地方没拦。比如把地址栏里的 ?id=1001 改成 1002,就能看到别人的订单。
怎么防:服务端每次请求都校验「这个资源属不属于当前用户」,不能只在前端把按钮藏起来——藏了不等于没有。
2. 加密机制失效
是什么:用了弱算法(MD5 存密码)、或者压根没上 HTTPS、或者证书校验被绕过。
怎么防:密码用 bcrypt / argon2;全站 HTTPS;敏感字段单独加密。
3. 注入
是什么:把用户输入拼进了命令里。最典型的是 SQL 注入:
1 | -- 后端如果这么写就完了 |
怎么防:用参数化查询(Prepared Statement),永远不要手拼 SQL。ORM 默认就是参数化的。
4. 不安全的设计
这是 2021 版新增的,指的是「设计阶段就没考虑安全」——比如验证码可以无限次试、短信接口没有频率限制。这类问题靠打补丁修不好,得在设计时想清楚。
5. 安全配置错误
默认的口令没改、目录列表开着、报错信息把堆栈直接吐给用户、云存储桶设成了公开读。都属于这一类,而且极其常见。
6. 易受攻击的过时组件
还在用三年前的 Log4j / Struts / 老版本 Nginx。
怎么防:定期跑 npm audit、pip-audit、trivy,把依赖升级变成日常而不是救火。
7. 身份认证失效
弱口令、验证码可爆破、会话 ID 写在 URL 里、登录失败次数不限制。
怎么防:登录失败次数限制 + 多因素认证 + 会话超时。
8. 软件和数据完整性失效
反序列化漏洞、CI/CD 流水线被投毒、从不验证签名的自动更新。
9. 日志与监控不足
被打了还不知道,事后查不到是谁、什么时候、怎么进来的。
怎么防:登录失败、权限变更、异常参数都要记日志,并且日志要送到攻击者删不掉的地方。
10. SSRF(服务端请求伪造)
是什么:你让服务器去访问一个你给的 URL,结果它把内网也访问了一遍:
1 | https://api.example.com/fetch?url=http://169.254.169.254/latest/meta-data/ |
上面这个地址在云主机上能拿到临时密钥。
怎么防:白名单允许访问的域名 + 禁止访问内网网段 + 禁用非常见协议。
一句话总结
| 类别 | 最短的防御动作 |
|---|---|
| 访问控制 | 每次请求都校验归属 |
| 加密 | 密码用 bcrypt,全站 HTTPS |
| 注入 | 参数化查询 |
| 配置 | 关掉默认账户和目录列表 |
| 组件 | 定期npm audit |
| 认证 | 失败次数限制 + MFA |
| SSRF | 域名白名单 + 禁内网 |
安全不是一次性项目,是习惯。