OWASP API Security Top 10(2019)-2
字数 2191 2025-08-10 12:18:06

OWASP API Security Top 10 (2019) 后五项漏洞详解与防护指南

API6:2019 批量分配 (Mass Assignment)

漏洞描述

批量分配漏洞发生在客户端数据自动与服务器端对象或类变量绑定的场景中。攻击者通过了解应用程序业务逻辑,发送特制数据来获取管理权限或篡改数据。

攻击原理

  • 框架(如Laravel、Code Ignitor)自动将客户端输入绑定到服务器端对象
  • 开发者未对可更新字段进行适当过滤
  • 攻击者可修改本应只读的属性(如用户名)或添加未预期的字段(如信用值)

攻击示例

API端点 /apirule6/user (POST)接收名称、用户名和密码参数。用户表有默认值为50的credit列。攻击者可通过请求添加credit字段并设置任意值:

{
  "name": "attacker",
  "username": "admin",
  "password": "hacked",
  "credit": 9999
}

潜在影响

  • 数据篡改
  • 权限提升(普通用户→管理员)
  • 业务逻辑绕过

防护措施

  1. 研究框架的后端数据绑定机制
  2. 在Laravel中使用$fillable(可填充)和$guarded(受保护)数组
  3. 避免自动绑定客户端输入到代码变量
  4. 实施严格的白名单机制,仅允许更新必要字段

API7:2019 安全配置错误 (Security Misconfiguration)

漏洞描述

由于安全控制实施不正确或配置不当,导致API整体安全性受损。包括默认配置不完整、公开云存储、CORS配置不当、敏感信息泄露等。

常见错误配置

  • 可公开访问的API文档、端点列表、错误日志
  • 未正确配置的WAF(Web应用防火墙)
  • 默认凭证未修改
  • 调试信息或堆栈跟踪暴露
  • 目录列表未禁用

攻击示例

端点 /apirule7/ping_v (GET)在调用失败时返回完整堆栈跟踪,包含:

  • 函数名称
  • 控制器和路由信息
  • 文件路径
  • 系统内部结构

潜在影响

  • 系统架构完全暴露
  • 安全机制被绕过
  • 敏感数据泄露
  • 为针对性攻击提供情报

防护措施

  1. 严格限制管理界面访问权限
  2. 禁用所有公开设备的默认凭证
  3. 禁用目录列表并设置适当文件权限
  4. 生产环境关闭调试模式,移除不必要代码
  5. 定期进行配置审计和安全扫描

API8:2019 注入 (Injection)

漏洞描述

当未经过滤的用户输入直接由API处理时,攻击者可执行非预期操作。包括SQL注入、OS命令注入、XML注入等。

注入类型

  • SQL注入:通过输入恶意SQL片段操纵数据库查询
  • OS命令注入:在输入中嵌入系统命令
  • XML注入:操纵XML解析过程

攻击示例

登录端点 /apirule8/user/login_v 未过滤输入,攻击者使用payload:

' OR 1=1--

可绕过认证获取任意账户访问权限。

潜在影响

  • 信息泄露
  • 数据丢失
  • 拒绝服务(DoS)
  • 完全账户接管
  • 远程代码执行(RCE)

防护措施

  1. 使用成熟验证库进行输入验证
  2. 自定义框架必须实施数据过滤和清理
  3. 在WAF中添加防注入规则
  4. 利用框架(Laravel/CodeIgniter等)内置过滤器
  5. 参数化查询(预编译语句)

API9:2019 资产处理不当 (Improper Assets Management)

漏洞描述

系统中存在多个API版本(如v1和v2),旧版本未及时下线且缺乏安全更新,通过共享数据库导致数据泄露或服务器接管。

主要问题

  • 未维护完整的API清单
  • 文档不完整或过时
  • 旧版本API未下线
  • 开发/测试/生产环境未隔离

攻击示例

旧版API端点 /apirule9/v1/user/login 返回过多信息(余额、地址等),而新版 /v2/user/login 已修复此问题,但v1仍可访问。

潜在影响

  • 通过旧版API泄露敏感数据
  • 利用未修复漏洞完全控制系统
  • 业务逻辑绕过

防护措施

  1. 在网络层面阻止已弃用API访问
  2. 隔离不同环境(开发/测试/生产)的API
  3. 维护完整API文档,包括:
    • 认证机制
    • 重定向规则
    • 错误处理
    • CORS策略
    • 速率限制
  4. 采用OpenAPI等标准自动生成文档
  5. 建立API生命周期管理流程

API10:2019 日志记录和监控不足 (Insufficient Logging & Monitoring)

漏洞描述

缺乏足够的日志记录和监控机制,导致无法追踪攻击者的恶意活动。许多组织只记录基础设施日志而忽略API日志。

关键缺失

  • 未记录访问者IP、端点、输入数据
  • 无时间戳或信息不完整
  • 缺乏安全事件关联分析
  • 无实时告警机制

日志应包含内容

  • 被拒绝的访问
  • 失败的身份验证尝试
  • 输入验证错误
  • 敏感操作记录
  • 完整的请求上下文

潜在影响

  • 无法识别攻击来源
  • 难以调查安全事件
  • 延长攻击停留时间
  • 合规性不达标

防护措施

  1. 部署SIEM(安全信息和事件管理)系统
  2. 标准化日志格式,包含足够调查细节
  3. 将日志视为敏感数据,确保其完整性
  4. 实施自定义告警规则检测可疑活动
  5. 框架应支持多级别日志记录(错误/调试/信息)
  6. 定期审计日志配置和保留策略

综合防护建议

  1. 安全开发

    • 采用安全框架和内置安全功能
    • 实施严格的输入验证和输出编码
    • 遵循最小权限原则
  2. 配置管理

    • 建立安全基线配置
    • 自动化配置检查和修复
    • 定期进行安全审计
  3. 资产管理

    • 维护完整的API清单
    • 及时下线废弃API
    • 环境隔离
  4. 监控响应

    • 全面的日志收集
    • 实时监控和告警
    • 建立事件响应流程
  5. 持续教育

    • 开发人员安全培训
    • 定期安全知识更新
    • 安全意识培养
OWASP API Security Top 10 (2019) 后五项漏洞详解与防护指南 API6:2019 批量分配 (Mass Assignment) 漏洞描述 批量分配漏洞发生在客户端数据自动与服务器端对象或类变量绑定的场景中。攻击者通过了解应用程序业务逻辑,发送特制数据来获取管理权限或篡改数据。 攻击原理 框架(如Laravel、Code Ignitor)自动将客户端输入绑定到服务器端对象 开发者未对可更新字段进行适当过滤 攻击者可修改本应只读的属性(如用户名)或添加未预期的字段(如信用值) 攻击示例 API端点 /apirule6/user (POST)接收名称、用户名和密码参数。用户表有默认值为50的credit列。攻击者可通过请求添加credit字段并设置任意值: 潜在影响 数据篡改 权限提升(普通用户→管理员) 业务逻辑绕过 防护措施 研究框架的后端数据绑定机制 在Laravel中使用 $fillable (可填充)和 $guarded (受保护)数组 避免自动绑定客户端输入到代码变量 实施严格的白名单机制,仅允许更新必要字段 API7:2019 安全配置错误 (Security Misconfiguration) 漏洞描述 由于安全控制实施不正确或配置不当,导致API整体安全性受损。包括默认配置不完整、公开云存储、CORS配置不当、敏感信息泄露等。 常见错误配置 可公开访问的API文档、端点列表、错误日志 未正确配置的WAF(Web应用防火墙) 默认凭证未修改 调试信息或堆栈跟踪暴露 目录列表未禁用 攻击示例 端点 /apirule7/ping_v (GET)在调用失败时返回完整堆栈跟踪,包含: 函数名称 控制器和路由信息 文件路径 系统内部结构 潜在影响 系统架构完全暴露 安全机制被绕过 敏感数据泄露 为针对性攻击提供情报 防护措施 严格限制管理界面访问权限 禁用所有公开设备的默认凭证 禁用目录列表并设置适当文件权限 生产环境关闭调试模式,移除不必要代码 定期进行配置审计和安全扫描 API8:2019 注入 (Injection) 漏洞描述 当未经过滤的用户输入直接由API处理时,攻击者可执行非预期操作。包括SQL注入、OS命令注入、XML注入等。 注入类型 SQL注入 :通过输入恶意SQL片段操纵数据库查询 OS命令注入 :在输入中嵌入系统命令 XML注入 :操纵XML解析过程 攻击示例 登录端点 /apirule8/user/login_v 未过滤输入,攻击者使用payload: 可绕过认证获取任意账户访问权限。 潜在影响 信息泄露 数据丢失 拒绝服务(DoS) 完全账户接管 远程代码执行(RCE) 防护措施 使用成熟验证库进行输入验证 自定义框架必须实施数据过滤和清理 在WAF中添加防注入规则 利用框架(Laravel/CodeIgniter等)内置过滤器 参数化查询(预编译语句) API9:2019 资产处理不当 (Improper Assets Management) 漏洞描述 系统中存在多个API版本(如v1和v2),旧版本未及时下线且缺乏安全更新,通过共享数据库导致数据泄露或服务器接管。 主要问题 未维护完整的API清单 文档不完整或过时 旧版本API未下线 开发/测试/生产环境未隔离 攻击示例 旧版API端点 /apirule9/v1/user/login 返回过多信息(余额、地址等),而新版 /v2/user/login 已修复此问题,但v1仍可访问。 潜在影响 通过旧版API泄露敏感数据 利用未修复漏洞完全控制系统 业务逻辑绕过 防护措施 在网络层面阻止已弃用API访问 隔离不同环境(开发/测试/生产)的API 维护完整API文档,包括: 认证机制 重定向规则 错误处理 CORS策略 速率限制 采用OpenAPI等标准自动生成文档 建立API生命周期管理流程 API10:2019 日志记录和监控不足 (Insufficient Logging & Monitoring) 漏洞描述 缺乏足够的日志记录和监控机制,导致无法追踪攻击者的恶意活动。许多组织只记录基础设施日志而忽略API日志。 关键缺失 未记录访问者IP、端点、输入数据 无时间戳或信息不完整 缺乏安全事件关联分析 无实时告警机制 日志应包含内容 被拒绝的访问 失败的身份验证尝试 输入验证错误 敏感操作记录 完整的请求上下文 潜在影响 无法识别攻击来源 难以调查安全事件 延长攻击停留时间 合规性不达标 防护措施 部署SIEM(安全信息和事件管理)系统 标准化日志格式,包含足够调查细节 将日志视为敏感数据,确保其完整性 实施自定义告警规则检测可疑活动 框架应支持多级别日志记录(错误/调试/信息) 定期审计日志配置和保留策略 综合防护建议 安全开发 : 采用安全框架和内置安全功能 实施严格的输入验证和输出编码 遵循最小权限原则 配置管理 : 建立安全基线配置 自动化配置检查和修复 定期进行安全审计 资产管理 : 维护完整的API清单 及时下线废弃API 环境隔离 监控响应 : 全面的日志收集 实时监控和告警 建立事件响应流程 持续教育 : 开发人员安全培训 定期安全知识更新 安全意识培养