近些年漏洞的威胁分类也发生了很大变化,王道SQL注入也慢慢淡出历史的舞台,最新OWASP Top Ten | OWASP Foundation版,分类和排名都变化了很多

[TOP1]失效的访问控制

访问控制失效指的是:系统没有正确限制用户访问资源或功能,导致用户可以访问本不该访问的内容或操作

具体的例子:

用户越权访问

  • 用户 A 修改自己的资料:
1
POST /api/user/update?id=1001
  • 他把 ID 改成了管理员的 ID:
1
POST /api/user/update?id=1
  • 没有权限校验?那就直接修改管理员信息成功了

水平越权

普通用户访问了其他用户的数据,比如:

1
GET /api/orders/123456

→ 返回了别人的订单信息(严重泄露)

垂直越权

普通用户调用了管理员接口:

1
POST /api/admin/delete_user?id=2

如果没检查角色权限,就能直接删号

前端控制误信

前端隐藏了按钮,认为“用户就点不到”:

1
2
<!-- 管理员按钮 -->
<button style="display: none">删除用户</button>

然而攻击者直接 F12 改代码,照样能点

[TOP2]加密机制失效

它其实是以前叫做“敏感数据暴露(Sensitive Data Exposure)”的进化版,专门指:加密没做好 or 该加密却没加密,导致敏感信息暴露

什么叫“加密机制失效”?

就是本来你用了加密,结果:

  • 用错算法了
  • 密钥管理乱套了
  • 加密流程瞎写
  • 本该加密的地方压根没加密

结果攻击者轻轻松松就拿到敏感数据:密码、银行卡、身份信息、Token、session、甚至数据库内容……

常见的失效方式:

错误类型 示例
使用弱加密算法 使用 MD5/SHA1 加密密码
明文传输敏感信息 登录时通过 HTTP 提交用户名密码
明文存储敏感数据 数据库里直接存储身份证、手机号等
加密后泄露密钥 把密钥写在代码里、GitHub里
没有加密 比如 Cookie 没有设置 Secure + HttpOnly
错误的加密流程 密文没有加随机盐、IV 被复用等

攻击者怎么利用

  • 截获未加密的 HTTP 请求,拿到账号密码。
  • 拿到数据库后用字典暴力破解 MD5 加密的密码。
  • 从前端源码或 Git 泄漏中拿到 AES 密钥解密所有数据。
  • 复用泄漏的 JWT Token 冒充他人身份

[TOP3]注入

最经典的一集

什么是注入漏洞(Injection)?

就是应用程序把用户输入当成代码或命令执行了,攻击者通过构造恶意输入,控制程序行为,从而实现:

  • 执行任意命令
  • 查询/篡改/删除数据库
  • 提权、越权
  • 甚至远程控制服务器

常见的注入类型

类型 简介
SQL 注入 向数据库查询语句中注入恶意 SQL 代码
命令注入 向系统命令中注入恶意命令
LDAP 注入 向 LDAP 查询语句中注入内容
XPATH 注入 攻击 XML 查询逻辑
NoSQL 注入 攻击 MongoDB、Redis 等非关系型数据库
表达式注入 如 SpEL、OGNL 等框架表达式被执行
ORM 注入 即使用了 ORM 框架,但拼接查询也能被注入

[TOP4]不安全的设计

不安全的设计指的是:在系统架构、业务流程、功能逻辑上,一开始就没有考虑安全,导致再怎么加补丁也“补不住”。

它和“实现缺陷”不同,强调的是设计阶段的安全问题,而不是代码实现时的小失误

举个栗子:

例1:没有验证码

  • 登录接口无限试错 → 被爆破了
  • 注册接口被批量打脚本 → 被刷号了

例2:密码重置只用邮箱地址就能触发

  • 没有身份验证 → 轻松盗号

例3:未做权限分离的业务逻辑

  • 所有人都能访问 /admin/delete_user?id=1

例4:可预测的文件上传路径

  • 上传文件保存为 /upload/{用户名}.jpg
  • 恶意访问 /upload/admin.jpg 直接泄露敏感资源

[TOP5]安全配置错误

什么是“安全配置错误”?

安全配置错误是指:系统、框架、服务器、数据库等组件的默认配置太危险,或者运维部署过程中配置疏忽、遗漏,导致被攻击者利用的情况。

一不小心就把“后门”留给了黑客

常见的配置错误示例:

类型 示例
默认密码未修改 admin/admin、root/root、123456
目录/文件暴露 .git//backup.zip/WEB-INF/可访问
错误信息泄露 报错页面暴露堆栈、路径、数据库结构等
开启调试模式 Flask 的 debug=True,Spring Boot 的 actuator
开放未使用端口 Redis、Elasticsearch、MongoDB 未授权访问
跨域配置不当 CORS 允许任意来源:Access-Control-Allow-Origin: *
缺少 HTTP 安全头 没设置 X-Content-Type-Options, X-Frame-Options
TLS 配置弱 使用 SSL3.0、弱密码套件、没有证书校验
容器或云服务配置问题 Docker 映射敏感目录、云 bucket 设置成公开可读写

[TOP6]自带缺陷和过时的组件

什么是“自带缺陷和过时的组件”?

指的是:你的项目中依赖了有已知漏洞的软件组件、库、框架、服务,但你却没有及时更新、替换或做防护,攻击者一看版本就知道怎么打。

也叫:

  • 第三方组件漏洞
  • 供应链安全问题的一种

常见的“有毒”组件例子:

类型 漏洞例子 危害
Web框架 Struts2(S2-045) 远程命令执行
JS库 jQuery <1.9 XSS 漏洞
Java依赖 log4j(Log4Shell) 任意代码执行
Python包 requests 老版本 SSL验证绕过
Node库 lodash、express 老版本 多种原型链污染
CMS系统 WordPress 插件漏洞 任意文件上传、SQL注入

只要我们获得了某个组件的版本,就可以用https://www.exploit-db.com/去查找对应的 exp

当然有时 exp 会不奏效,我们可以根据实际情况对 exp 进行修改

[TOP7]身份识别和身份验证错误

什么是“身份识别与身份验证错误”?

指的是系统在识别用户身份验证用户合法性的机制上设计不当、实现出错,导致攻击者可以伪装他人、绕过登录、劫持账号、撞库成功等

具体表现有哪些?

类别 示例 危害
弱密码策略 可以设置 123456admin 被撞库/穷举轻松成功
无登录限制 登录接口无限尝试密码 爆破成功,账户被盗
验证码缺失/可绕过 验证码固定、简单或能跳过 自动化暴力攻击
Session管理不当 Token 泄露、过期机制缺失 会话固定、劫持
身份验证信息明文传输 HTTP 明文传用户名/密码 被中间人攻击窃取
多因子认证缺失 仅靠密码验证 易被撞库或钓鱼攻击
身份切换不安全 登录后修改参数切换为他人身份 水平越权或账号接管

[TOP8]软件和数据完整性故障

什么是“软件和数据完整性故障”?

指的是:系统在运行过程中依赖的软件、配置、代码或数据没有进行完整性校验或校验机制被绕过,攻击者就可以篡改这些内容,进而控制系统。

简而言之:
你信任的东西被“偷偷动手脚”了,但你没检查

常见攻击场景

类型 示例 后果
供应链投毒 **开发依赖了被挂马的 NPM 包(如 ****event-stream** 项目编译就中毒,攻击者远控系统
自动更新缺乏签名验证 软件启动时更新 **.exe** 没做签名校验 MITM 劫持替换为木马
CI/CD 脚本可被注入 发布脚本中引用外部 Bash/Python 脚本 远程代码执行、上传后门
缺少完整性校验 静态文件未设置 Hash,容易被篡改 攻击者插入恶意 JS/XSS
Docker 镜像来源不明 使用了不可信的第三方镜像 镜像自带恶意服务或后门账号

[TOP9]安全日志和监控故障

什么是“安全日志和监控故障 ”?

安全日志和监控故障是指系统未能妥善记录安全相关事件,或者在发生攻击或异常时未能及时检测与响应,导致攻击行为未被发现或延迟应对,从而扩大损害范围。

常见表现

  • 系统关键操作没有记录日志,如登录、权限变更、敏感数据访问。
  • 日志记录过于简单或不一致,缺乏时间戳、用户标识、IP 信息等。
  • 日志没有集中存储或无法追踪。
  • 未部署 SIEM(安全信息与事件管理)系统或告警规则缺失。
  • 日志被攻击者删除或篡改后无恢复机制。
  • 发生攻击时无自动响应机制(如封锁 IP、断开连接等)。

实际危害

  • 攻击滞后发现:例如 Webshell 被植入服务器几个月都未被察觉。
  • 取证困难:无法还原攻击路径,影响溯源与司法调查。
  • 监管不合规:如金融、医疗等行业必须满足日志留存合规要求。
  • 扩大损害:攻击者反复尝试暴力破解或横向移动而不被发现。

[TOP10]服务器端请求伪造(SSRF)

什么是“服务器端请求伪造(SSRF) ”?

SSRF 是指攻击者诱使 服务器端发起请求,目标通常是:

  • 内网服务(如 http://127.0.0.1:2375
  • 云服务元数据接口(如 AWS 的 http://169.254.169.254/latest/meta-data/
  • 其他本不应被访问的地址

攻击原理:

攻击者控制请求地址,让服务器代为访问:

1
POST /fetch?url=http://169.254.169.254/latest/meta-data/iam/

服务端拿这个 URL 去请求,就泄露了内部数据。

检测方法(实战技巧):

  • 使用 burp 修改参数试探内网 IP,如:
1
2
3
url=http://127.0.0.1:80/
url=http://localhost:2375/
url=http://169.254.169.254/
  • 利用 DNSlog 验证是否存在请求发出
  • 用 Gopher 协议构造 Redis 注入等高级 SSRF

延伸场景(云原生):

  • SSRF 是打穿云平台、K8S 集群、获取云凭证的第一步
  • 可与 RCE、反序列化、身份提升等漏洞组合使用,形成 链式攻击

**— **

OWASP Top 10 总结了当今最常见且最严重的 Web 安全风险,涵盖了访问控制失效、加密机制薄弱、注入攻击、设计缺陷、配置错误、使用过时组件、身份验证问题、完整性缺失、日志监控不足以及服务器端请求伪造等各个层面。
了解这些风险的原理、成因和防护方式,有助于开发者、运维人员与安全工程师在系统设计与实现过程中构建更加健壮、可信赖的应用程序。
安全不是一次性的操作,而是一个持续演进的过程。只有将安全理念融入整个软件生命周期,才能真正有效降低攻击面,提升整体防护水平。