API安全漏洞防范指南
字数 2012 2025-08-22 22:47:30

API安全漏洞防范指南

前言

根据Fastly 2024年3月的调查报告,95%的企业在过去一年中遇到过API安全问题。本文基于OWASP API Security Top 10,结合金融行业业务特点和Java开发技术栈,详细介绍API面临的安全漏洞问题及防范措施。

1. 防范敏感信息泄漏

1.1 信息脱敏

应用场景:当API接口返回结果涉及敏感信息在客户端展示时,应采用脱敏处理。

需脱敏的敏感数据类型

  • 姓名
  • 证件号
  • 卡号
  • 手机号
  • 车牌号

脱敏方法:一般采用掩码方式

示例

原始返回报文: {"name":"张三","idCard":"110101199003072345","mobile":"13812345678"}
掩码后返回报文: {"name":"张*","idCard":"110101********2345","mobile":"138****5678"}

1.2 信息加密

应用场景:无法脱敏的敏感数据需进行加密处理

加密方式

  • 字段级加密
  • 全报文加密
  • 传输通道SSL加密

推荐加密算法

  • 对称密码算法:SM4、AES
  • 非对称密码算法:SM2、RSA
  • 杂凑算法:SM3、SHA256

不推荐算法:DES、MD5、SHA1(已不安全)

2. 防范API权限问题

2.1 防范未授权访问

身份认证机制

  • AK/SK
  • Token
  • Cookie
  • 数字签名

关键要求

  • 身份认证凭据需有超时失效机制(互联网系统一般不超过15分钟)
  • 不能仅依据客户端发送的userid、name、role等简易身份标识判断用户身份

Shiro拦截器示例

Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>();
// 允许匿名访问静态资源
filterChainDefinitionMap.put("/static/**", "anon");
// 配置退出过滤器
filterChainDefinitionMap.put("/logout", "logout");
// authc:所有url都必须认证通过才可以访问
filterChainDefinitionMap.put("/**", "authc");
// 访问未授权界面跳转到统一的错误页面
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);

2.2 防范垂直越权

Shiro授权拦截器类型

  • perms
  • roles
  • ssl
  • rest
  • port

示例

// 必须是管理员角色可以访问
filterChainDefinitionMap.put("/admin/**", "roles[100001]");

2.3 防范水平越权

防范措施

  1. 对访问数据做权限控制
  2. SQL语句带上userId进行操作
  3. 使用随机且不可预测的值作为请求参数

SQL示例

select * from orders where order_id = #{orderId} and user_id = #{userId}

3. 防范高频恶意访问

3.1 防范资源浪费

典型场景

  • 短信发送接口
  • 文件上传/下载接口

防范措施

  • 限制请求频率(如3次)
  • 超过限制后需人机交互验证(图形验证码等)

恶意请求示例

base_url="http://xxx/"
post_data="mobile=13812345678"
for i in range(10000):
    requests.post(url=base_url+"/sendsms",data=post_data)

3.2 防范拒绝服务

防范措施

  • 对消耗CPU资源的接口限制请求频率
  • 对消耗内存、磁盘和JVM Buffer的接口限制请求数据包大小和频率

恶意请求示例

base_url="http://xxx/"
post_data="data="+"A"*1000000
for i in range(10000):
    requests.post(url=base_url+"/submit",data=post_data)

4. 防范注入类安全漏洞

4.1 传入参数校验

校验内容

  • 类型
  • 长度
  • 格式
  • 取值范围
  • 特殊字符检查

需防范的漏洞类型

  • SQL注入
  • 代码注入
  • 反序列化命令执行
  • SSRF
  • URL跳转漏洞

4.2 返回数据校验

防范漏洞

  • XSS
  • 点击劫持
  • 敏感信息泄漏(如错误堆栈)

5. 防范重放攻击

5.1 时间戳校验

原理:正常HTTP请求响应时间一般在1s内完成,基本不超过10s

实施:服务端设置时间阈值,拒绝超过阈值的请求

5.2 随机因子或交易流水号校验

实施步骤

  1. 客户端每次请求携带随机数或交易流水号
  2. 服务端校验是否存在
  3. 不存在则存储到数据库/缓存
  4. 存在则判定为重放攻击

6. 防范交易抵赖

6.1 数字签名实现原发性抗抵赖

实施方式

  • 客户端使用数字证书、Ukey等对交易报文签名
  • 服务端通过验签实现抗抵赖

6.2 保存原发性证据

必须保存的信息

  • 交易流水号
  • 相关账户号
  • 交易终端标识
  • 相关交易指令号

交易流水查询功能要求

  • 日期
  • 时间
  • 交易卡号
  • 交易金额
  • 资金余额

7. 防范业务逻辑漏洞

7.1 确保交易流程完整性

原则

  1. 使用服务器端保存的、已合法性检查的数据完成交易
  2. 对客户端提交的交易数据实施合法性检查后再处理
  3. 多次交互中每次获取数据后都重新实施合法性检查

7.2 防范条件竞争漏洞

典型场景

  • 签到
  • 领取积分
  • 使用优惠券

Spring框架防范措施

  • 尽量使用局部变量而非共享变量
  • 使用ThreadLocal存储和传递上下文信息

8. 避免调试接口暴露

禁止在互联网环境开放的接口

  • 测试类、调试类接口(如Swagger、api-docs)
  • 监控类接口(如Spring Actuator)

总结

本文所述漏洞与OWASP API TOP 10 2023版对应关系如下:

本文内容 OWASP API TOP 10对应项
敏感信息泄漏 API1: Broken Object Level Authorization
API权限问题 API1, API2, API5
高频恶意访问 API4: Unrestricted Resource Consumption
注入类漏洞 API8: Injection
重放攻击 API9: Improper Assets Management
交易抵赖 -
业务逻辑漏洞 API10: Unsafe Consumption of APIs
调试接口暴露 API9: Improper Assets Management

参考链接

OWASP API Security Top 10

API安全漏洞防范指南 前言 根据Fastly 2024年3月的调查报告,95%的企业在过去一年中遇到过API安全问题。本文基于OWASP API Security Top 10,结合金融行业业务特点和Java开发技术栈,详细介绍API面临的安全漏洞问题及防范措施。 1. 防范敏感信息泄漏 1.1 信息脱敏 应用场景 :当API接口返回结果涉及敏感信息在客户端展示时,应采用脱敏处理。 需脱敏的敏感数据类型 : 姓名 证件号 卡号 手机号 车牌号 脱敏方法 :一般采用掩码方式 示例 : 1.2 信息加密 应用场景 :无法脱敏的敏感数据需进行加密处理 加密方式 : 字段级加密 全报文加密 传输通道SSL加密 推荐加密算法 : 对称密码算法:SM4、AES 非对称密码算法:SM2、RSA 杂凑算法:SM3、SHA256 不推荐算法 :DES、MD5、SHA1(已不安全) 2. 防范API权限问题 2.1 防范未授权访问 身份认证机制 : AK/SK Token Cookie 数字签名 关键要求 : 身份认证凭据需有超时失效机制(互联网系统一般不超过15分钟) 不能仅依据客户端发送的userid、name、role等简易身份标识判断用户身份 Shiro拦截器示例 : 2.2 防范垂直越权 Shiro授权拦截器类型 : perms roles ssl rest port 示例 : 2.3 防范水平越权 防范措施 : 对访问数据做权限控制 SQL语句带上userId进行操作 使用随机且不可预测的值作为请求参数 SQL示例 : 3. 防范高频恶意访问 3.1 防范资源浪费 典型场景 : 短信发送接口 文件上传/下载接口 防范措施 : 限制请求频率(如3次) 超过限制后需人机交互验证(图形验证码等) 恶意请求示例 : 3.2 防范拒绝服务 防范措施 : 对消耗CPU资源的接口限制请求频率 对消耗内存、磁盘和JVM Buffer的接口限制请求数据包大小和频率 恶意请求示例 : 4. 防范注入类安全漏洞 4.1 传入参数校验 校验内容 : 类型 长度 格式 取值范围 特殊字符检查 需防范的漏洞类型 : SQL注入 代码注入 反序列化命令执行 SSRF URL跳转漏洞 4.2 返回数据校验 防范漏洞 : XSS 点击劫持 敏感信息泄漏(如错误堆栈) 5. 防范重放攻击 5.1 时间戳校验 原理 :正常HTTP请求响应时间一般在1s内完成,基本不超过10s 实施 :服务端设置时间阈值,拒绝超过阈值的请求 5.2 随机因子或交易流水号校验 实施步骤 : 客户端每次请求携带随机数或交易流水号 服务端校验是否存在 不存在则存储到数据库/缓存 存在则判定为重放攻击 6. 防范交易抵赖 6.1 数字签名实现原发性抗抵赖 实施方式 : 客户端使用数字证书、Ukey等对交易报文签名 服务端通过验签实现抗抵赖 6.2 保存原发性证据 必须保存的信息 : 交易流水号 相关账户号 交易终端标识 相关交易指令号 交易流水查询功能要求 : 日期 时间 交易卡号 交易金额 资金余额 7. 防范业务逻辑漏洞 7.1 确保交易流程完整性 原则 : 使用服务器端保存的、已合法性检查的数据完成交易 对客户端提交的交易数据实施合法性检查后再处理 多次交互中每次获取数据后都重新实施合法性检查 7.2 防范条件竞争漏洞 典型场景 : 签到 领取积分 使用优惠券 Spring框架防范措施 : 尽量使用局部变量而非共享变量 使用ThreadLocal存储和传递上下文信息 8. 避免调试接口暴露 禁止在互联网环境开放的接口 : 测试类、调试类接口(如Swagger、api-docs) 监控类接口(如Spring Actuator) 总结 本文所述漏洞与OWASP API TOP 10 2023版对应关系如下: | 本文内容 | OWASP API TOP 10对应项 | |---------|----------------------| | 敏感信息泄漏 | API1: Broken Object Level Authorization | | API权限问题 | API1, API2, API5 | | 高频恶意访问 | API4: Unrestricted Resource Consumption | | 注入类漏洞 | API8: Injection | | 重放攻击 | API9: Improper Assets Management | | 交易抵赖 | - | | 业务逻辑漏洞 | API10: Unsafe Consumption of APIs | | 调试接口暴露 | API9: Improper Assets Management | 参考链接 OWASP API Security Top 10