接口安全检查
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-aop
和spring-boot-starter-cache
来实现接口的频率限制
3. 补充说明
3.1. 个人信息
名词 | 说明 |
---|---|
基本资料 | 个人姓名、生日、性别、民族、国籍、家庭关系、住址、个人电话号码、电子邮件地址等 |
身份信息 | 身份证、军官证、护照、驾驶证、 工作证、出入证、社保卡、居住证等 |
生物识别信息 | 个人基因、指纹、声纹、掌纹、耳廓、虹膜、面部识别特征等 |
网络身份标识信息 | 个人信息主体账号、IP 地址、个人数字证书等 |
健康生理信息 | 个人因生病医治等产生的相关记录,如病症、住院志、医嘱单、检验报告、手术及麻醉记录、护理记录、用药记录、药物食物过敏信息、生育信息、以往病史、诊治情况、家族病史、现病史、传染病史等,以及与个人身体健康状况相关的信息,如体重、身高、肺活量等 |
教育工作信息 | 个人职业、职位、工作单位、学历、学位、教育经历、工作经历、培训记录、成绩单等 |
财产信息 | 银行账户、鉴别信息(口令)、存款信息(包括资金数量、支付收款记录等)、房产信息、信贷记录、征信信息、交易和消费记录、流水记录等,以及虚拟货币、虚拟交易、游戏类兑换码等虚拟财产信息 |
通信信息 | 通信记录和内容、短信、彩信、电子邮件,以及描述个人通信的数据(通常称为元数据)等 |
联系人信息 | 通讯录、好友列表、群列表、电子邮件地址列表等 |
个人上网记录 | 指通过日志储存的个人信息主体操作记录,包括网站浏览记录、软件使用记录、点击记录、收藏列表等 |
常用设备信息 | 包括硬件序列号、设备 MAC 地址、软件列表、唯一设备识别码(如 IMEI/Android ID/IDFA/OpenUDID/GUID/SIM 卡 IMSI 信息等)等在内的描述个人常用设备基本情况的信息 |
个人位置信息 | 行踪轨迹、精准定位信息、住宿信息、经纬度等 |
其他信息 | 婚史、宗教信仰、性取向、未公开的违法犯罪记录等 |
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!