
在移动应用开发与上线过程中,用户投诉常与数据泄露风险和权限滥用漏洞相关。其中,本地数据明文存储和API 越权访问是导致用户隐私泄露、功能异常的核心漏洞类型。本文将解析这两个漏洞的危害、检测方法及修复建议,并提供标准化检测模板,帮助企业快速定位与整改问题。
定义:APP 将用户敏感信息(如密码、支付凭证、个人身份信息)以明文形式存储在本地文件系统或数据库中;
危害:
通过文件分析工具(如 Frida、Charles)可直接读取敏感数据;
用户隐私泄露风险,可能引发法律纠纷(如违反《个人信息保护法》)。
工具:
Android:使用 adb shell 查找 /data/data/[包名]/databases/ 或 shared_prefs/;
iOS:通过 Cycript 或 iFile 工具访问 Library/Preferences/ 或 Documents/。
操作:
导出 SQLite 数据库或 SharedPreferences 文件;
使用文本编辑器或 SQLite 浏览器查看字段内容是否为明文。
检查点:
是否使用 AES-256 等强加密算法对敏感字段加密;
加密密钥是否硬编码或通过安全机制动态生成。
工具:
使用 grep "password" * 快速搜索明文字段;
使用 strings 命令解析二进制文件中的敏感信息。
数据加密:
对敏感字段(如密码、支付信息)进行非对称加密(如 RSA)或对称加密(AES);
密钥需通过安全机制(如 KeyStore)存储,避免硬编码。
最小化存储:
避免存储非必要的敏感数据(如历史搜索记录、临时凭证)。
定义:用户通过篡改请求参数(如用户 ID、权限标识),访问超出自身权限范围的 API 接口;
危害:
普通用户可读取管理员数据,或修改其他用户信息;
导致业务逻辑混乱(如恶意订单提交、账户劫持)。
工具:
使用 Charles、Fiddler 或 mitmproxy 抓取 APP 请求;
识别关键接口(如 /api/user/profile、/api/order/delete)。
操作:
修改请求参数(如 user_id=1001 → user_id=admin);
观察接口返回是否允许越权操作(如返回非当前用户的数据)。
步骤:
注册两个测试账号(用户 A 与用户 B);
使用用户 A 的 token 调用接口时,篡改参数访问用户 B 的资源;
验证服务器是否拒绝请求或返回错误码(如 403 Forbidden)。
技术细节:需确保测试环境与生产环境配置一致,避免因缓存或测试数据导致误判。
服务端权限校验:
所有接口必须基于用户身份(token/Session)验证操作权限;
在数据库查询中强制绑定用户 ID(如 SELECT * FROM orders WHERE user_id = #{token.userId})。
输入参数过滤:
对用户提交的参数(如 user_id)进行合法性校验(如白名单机制);
禁止直接使用用户输入参数作为数据库查询条件。
| 检测项 | 检测方法 | 预期结果 |
|---|---|---|
| 1. 敏感字段存储方式 | 逆向分析本地数据库或文件,检查字段是否为明文 | 不应出现明文密码、支付信息等 |
| 2. 加密算法强度 | 检查加密算法是否为 AES-256 等强加密,密钥是否动态生成 | 使用强加密算法,密钥非硬编码 |
| 3. 数据最小化原则 | 验证是否存储非必要敏感数据(如历史记录、临时凭证) | 仅存储必要数据,定期清理 |
| 检测项 | 检测方法 | 预期结果 |
|---|---|---|
| 1. 权限绑定逻辑 | 抓包修改用户 ID 或角色参数,调用关键接口 | 返回 403 Forbidden 或无数据 |
| 2. 多用户场景测试 | 使用不同账号调用接口,验证是否能访问非当前用户数据 | 仅返回当前用户关联数据 |
| 3. 参数合法性校验 | 提交非法参数(如负数、超长字符串),观察接口响应 | 拒绝非法请求,返回明确错误码 |
APP 上线后的用户投诉往往指向核心安全漏洞。通过第三方测试机构标准化检测模板与专业工具,企业可快速定位“本地数据明文存储”与“API 越权访问”问题,并针对性修复。建议将第三方渗透测试纳入开发生命周期(SDLC),结合自动化与人工复核,构建全链条安全防线,保障用户隐私与业务合规性。
标签:渗透测试、软件安全