接口安全检查

目录

  • 1. 概述
  • 2. 方案
    • 2.1. 身份校验(认证)
    • 2.2. 权限控制(鉴权)
    • 2.3. 脱敏
    • 2.4. 加密
    • 2.5. 请求频率限制
  • 3. 补充说明
    • 3.1. 个人信息

1. 概述

接口安全检查: 是发现和消除事故隐患、落实安全措施、预防事故发生的重要手段。

  • 保障数据安全:通过检查接口,可以验证数据的完整性和安全性,确保数据在传输和存储过程中不被篡改或窃取。
  • 防止非法访问:通过接口安全检查,可以验证请求的合法性,防止未经授权的访问和操作,保护系统的安全和稳定。
  • 提高系统可靠性:接口安全检查可以发现并解决潜在的安全漏洞和问题,从而提高系统的可靠性和稳定性。
  • 增强用户体验:通过接口安全检查,可以减少系统被攻击的风险,避免因安全问题导致的服务中断或数据泄露,从而增强用户体验。
  • 满足合规要求:随着对数据安全和隐私保护的要求越来越严格,接口安全检查可以帮助Java项目满足相关法规和标准的要求,避免因安全问题导致的法律风险和罚款。
  • 提升开发效率:通过自动化接口安全检查工具,可以提高测试效率和准确性,减少人工测试的工作量和时间成本。

重要检查对象:

  • 自己开发维护的接口
  • 提供给第三方使用的接口
  • 第三方提供的接口的调用

2. 方案

2.1. 身份校验(认证)

身份校验: 接口是否登录才可访问。

案例: 有一个可通过手机号查询用户个人信息的接口,并且没有设置任何身份验证措施。 张三就可以根据手机号去获取到用户信息,再去倒卖盈利。

检查方法:

  • 接口是否做了身份校验(账号密码、token令牌、手机验证码、人脸识别等)
  • 调用后台接口的时候身份校验项是否非必传参数

解决方案:

  • JAAS
  • Spring Security
  • 自定义的身份验证:如加一个签名拦截器(Intercepter),没有带签名参数的访问直接拦截
  • 使用第三方身份验证提供商

2.2. 权限控制(鉴权)

角色鉴权: 当前用户是否具有调用某个接口的权限,如果没有那就不能调用接口。比如root用户拥有系统的所有权限,可以对系统进行任何操作,但普通用户只有部分权限。

案例: 张三注册了一个网站用户,发现有个接口,只要传入用户账号,就能查询到此用户实名信息,张三就可以通过此接口倒卖信息获利。这就是没做权限限制,理应是管理员的权限才能调用的接口,普通用户也可以使用。

检查方法:

  • 是否存在水平越权:同一级别的用户A和B,A能否将接口的关键信息换成B的从而直接调用B才能调用的接口
  • 是否存在垂直越权:C是A下面的子用户,A能否将接口的关键信息换成C的从而直接调用C才能调用的接口
  • 检查代码是否仅通过传入的参数来判断查询的数据,而没有校验用户是否有该数据的查询权限

解决方案:

  • 权限控制:
    • Spring Security等框架来实施细粒度的权限控制
    • 自定义鉴权逻辑
  • 数据加密:
    • 对敏感数据进行加密存储,确保即使数据被窃取,也不能直接访问
  • 最小权限原则:
    • 为每个应用或服务提供所需的最小权限,避免不必要的权限提升

2.3. 脱敏

数据脱敏: 对敏感数据的隐藏、加密或替换,以确保数据在传输、存储和使用过程中的安全性。

案例: 张三发现某网站有个中奖榜单,会展示中奖用户的手机号和身份证号等信息,但这些信息都做了脱敏处理,无法获取到确切的信息。但他通过访问这个榜单的后台接口,发现Response中的数据没有脱敏,他就可以以此获取所有中奖人的信息,从而获利。

检查方法:

  • 不需要展示敏感信息的接口的出参就别传敏感信息;需要展示敏感信息的接口要对敏感数据进行加密、替换或隐藏后再返回Response
  • 重点检查Response中有没有未脱敏的敏感数据
  • 非必要情况,不得提供批量导出敏感信息的模块,检查系统是否有相关模块设计

解决方案:

  • 用户需要知道完整敏感数据:
    • 对敏感数据进行二次验证
  • 用户不需要知道完整敏感信息:
    • 仅返回业务必须的最少信息,不能将所有信息全部返回到
      前台

2.4. 加密

数据加密: 通过加密算法对接口传输的数据进行加密处理,以防止数据在传输过程中被窃取或篡改。

案例: 张三通过互联网系统漏洞,获取到某服务器 A 的权限,通过 ARP 欺骗,模拟网关,抓取整个网段的网络流量,发现某些系统未使用 https 加密传输,分析 http 流量收集到大量用户账号信息等,整理收集到的信息生成定制化字典,对其他服务器进行爆破攻击,最终获取到核心服务器权限,造成严重安全事故

检查方法:

  • 检查接口是否采用 HTTPS 加密传输,在浏览器访问接口,检查浏览器地
    址栏是否显示不安全连接
  • 有 HTTPS 的接口,检查使用 HTTP 是否也能正常请求接口,有没有强制转
    换为 HTTPS
  • 检查接口的Response是否存在敏感信息的明文

解决方案:

  • 保证传输过程的机密性:互联网接口一致使用https,建议直接在负载均衡上安装 SSL 证书(可用Nginx代理),HTTP 端口重定向到 HTTPS 端口
  • 对传输数据进行加密处理(必要,建议非对称加密),并进行完整性校验

2.5. 请求频率限制

请求频率限制: 输错密码5次就得再等一段时间才能再次尝试,防止频繁访问降低系统性能。

检查方法:

  • 检查重要接口是否有频率限制设计,如发送短信,查询数据,上传文件等接口
  • 检查接口频率限制是否生效,如使用同一个 HTTP 请求,重复发送 10 次以上,看接口是否仍然正常使用,未报异常
  • 若某个接口存在漏洞,攻击者会在短时间内,大批量高频率访问某个接口,检查是否有接口调用次数统计模块

解决方案:

  • 可以使用第三方库如spring-boot-starter-aopspring-boot-starter-cache来实现接口的频率限制

3. 补充说明

3.1. 个人信息

名词 说明
基本资料 个人姓名、生日、性别、民族、国籍、家庭关系、住址、个人电话号码、电子邮件地址等
身份信息 身份证、军官证、护照、驾驶证、 工作证、出入证、社保卡、居住证等
生物识别信息 个人基因、指纹、声纹、掌纹、耳廓、虹膜、面部识别特征等
网络身份标识信息 个人信息主体账号、IP 地址、个人数字证书等
健康生理信息 个人因生病医治等产生的相关记录,如病症、住院志、医嘱单、检验报告、手术及麻醉记录、护理记录、用药记录、药物食物过敏信息、生育信息、以往病史、诊治情况、家族病史、现病史、传染病史等,以及与个人身体健康状况相关的信息,如体重、身高、肺活量等
教育工作信息 个人职业、职位、工作单位、学历、学位、教育经历、工作经历、培训记录、成绩单等
财产信息 银行账户、鉴别信息(口令)、存款信息(包括资金数量、支付收款记录等)、房产信息、信贷记录、征信信息、交易和消费记录、流水记录等,以及虚拟货币、虚拟交易、游戏类兑换码等虚拟财产信息
通信信息 通信记录和内容、短信、彩信、电子邮件,以及描述个人通信的数据(通常称为元数据)等
联系人信息 通讯录、好友列表、群列表、电子邮件地址列表等
个人上网记录 指通过日志储存的个人信息主体操作记录,包括网站浏览记录、软件使用记录、点击记录、收藏列表等
常用设备信息 包括硬件序列号、设备 MAC 地址、软件列表、唯一设备识别码(如 IMEI/Android ID/IDFA/OpenUDID/GUID/SIM 卡 IMSI 信息等)等在内的描述个人常用设备基本情况的信息
个人位置信息 行踪轨迹、精准定位信息、住宿信息、经纬度等
其他信息 婚史、宗教信仰、性取向、未公开的违法犯罪记录等

你可能感兴趣的:(笔记,数据库)