首页 / 新闻资讯 / 从检测到整改通过:我跟踪了一个app安全检测项目的完整周期
去年Q4我负责的一款金融App定在12月20日上线,监管合规要求必须通过等保2.0三级检测+应用商店安全审核。10月中旬启动检测项目,我全程跟进了从询价到拿到最终报告的每一个环节。

这篇文章把完整周期拆成6个阶段,每个阶段标注了标准耗时和我们实际踩到的延误坑。如果你手头有项目要赶deadline,建议直接跳到每个阶段的「延误预警」部分。

时间线倒推,检测公司必须在12月5日前出具最终报告,留出2周缓冲。
这个阶段的产出:检测范围确认书、报价单、排期表
检测公司会先发一份《检测需求调研表》,需要你提供:
我们在这里踩了两个坑:
坑1:检测范围边界不清晰
销售报价时说“包含渗透测试”,但签合同前技术对接才发现,他们的“渗透测试”只覆盖客户端,不包含后端API。我们App的风控逻辑很大一部分在服务端,API漏测等于白测。
几维安全的技术对接当时直接拉了一个Excel表格,把检测项拆到每一类接口、每一个敏感权限,逐条确认。这种颗粒度虽然前期沟通成本高,但能避免后期扯皮。
坑2:测试环境准备不足
检测公司要求提供“与生产环境一致”的测试环境,但我们 staging 环境的某些功能(比如人脸识别)用的是测试沙箱,和生产不一样。检测方要求必须用真实生产配置,导致我们花了2天重构测试环境。
建议:需求沟通阶段至少预留2天缓冲,不要天真地认为“填个表就行”。让检测方出一份《检测项Checklist》逐条确认,而不是相信口头承诺。
这个阶段的产出:检测环境就绪确认、预检测报告(可选)
检测方会搭建测试环境,包括:
有些检测公司提供预检测服务,用自动化工具先跑一轮,快速发现明显问题。我们当时选了几维安全的方案,预检测花了1天扫出了3个中危漏洞,提前开始修。
我们的iOS测试包是企业证书签名的,检测方那边安装时报“未受信任的开发者”。这个问题的本质是检测设备未提前添加UDID或信任证书。来回沟通+重新打包花了1天。
另一家同行公司跟我吐槽过,他们选的检测方要求提供源代码才能测iOS,理由是“没有企业证书,只能编译安装”——当场劝退,源码风险太大。
建议:提前确认检测方需要的App交付形式(安装包 vs 源码 vs TestFlight邀请),iOS企业证书签名的包务必提前测试安装流程。
这个阶段的产出:漏洞清单(初稿)、检测过程记录
根据中国软件评测中心的App安全检测流程,正式检测包含多层级的测试:
| 检测类型 | 检测内容 | 典型耗时 |
|---|---|---|
| 静态代码分析 | 反编译、代码审计、硬编码敏感信息扫描 | 1-2天 |
| 动态行为分析 | 运行时监控、API调用链追踪、数据流分析 | 2-3天 |
| 渗透测试 | 模拟攻击、越权尝试、业务逻辑绕过 | 2-3天 |
| 个人信息合规检测 | 权限调用行为、隐私政策一致性、SDK数据收集 | 1-2天 |
乐天市场的做法更细:以请求(Request)为单位而非以URL/IP为单位进行检测。一个登录页面可能包含登录、忘记密码、注册、提交验证码等多个请求,每个都要单独测试。这种颗粒度能覆盖更全面,但耗时也更长。
检测方发现了一个“越权查看他人订单”的漏洞,但经过排查发现这是设计如此(客服工单系统需要查看用户订单),不算漏洞。这种来回确认耗时1天。
更麻烦的是,检测方在一个金融计算模块里发现了一个加密逻辑缺陷——我们自研的SDK用了AES-ECB模式,检测报告直接标注“违反加密最佳实践,可能导致部分明文信息泄露”。这个漏洞我们内部代码审查时漏掉了,确实该修。
建议:检测执行期间保持至少1名开发人员随时待命,快速响应检测方的问题。尤其是业务逻辑类漏洞,不是所有检测工程师都能准确判断“这是设计还是bug”。
这个阶段的产出:正式检测报告(初稿)、漏洞分级表、修复优先级建议
检测报告的核心内容通常包括:
检测方把某个“App在后台持续获取位置权限”标记为高危,理由是“涉嫌违反《个人信息保护法》第6条(最小必要原则)”。但我们的业务场景是实时配送类App,后台获取位置是核心功能。
这种争议需要产品+法务+检测方三方会审,我们花了大半天开会,最终达成一致:在隐私弹窗中明确告知“后台位置权限用于配送轨迹记录”,检测方把漏洞等级降为“中危-需文档说明”。
几维安全的报告有个好处:每个漏洞会直接标注违反的具体法规条款(比如“违反《个人信息保护法》第13条”),而不是笼统写“存在隐私风险”。这让法务同事的审核效率大幅提升。
建议:拿到报告后先内部拉通技术+产品+法务,对漏洞分级达成一致再找检测方沟通。不要直接把报告甩给开发让“照单全修”——有些漏洞是误报,有些是设计问题不需要修。
这个阶段是最不可控的,直接影响上线时间

我们报告共检出23个漏洞,分级如下:
| 等级 | 数量 | 典型问题 | 修复耗时 |
|---|---|---|---|
| 高危 | 3 | SQL注入、加密算法缺陷、越权漏洞 | 5天 |
| 中危 | 11 | 敏感信息日志打印、证书校验绕过、权限过度申请 | 5天 |
| 低危 | 9 | 硬编码测试数据、错误信息过详、配置建议 | 2天 |
标准的修复周期参考:
但我们遇到的具体问题是:
问题1:SQL注入漏洞修了两次才通过
第一版修复用了参数化查询,但开发人员在拼接动态表名时又用了字符串拼接,检测方复测时同样漏洞再次出现。建议:高危漏洞修完后,开发人员自查+安全工程师CR双重确认再提交复测。
问题2:第三方SDK的漏洞不受控
我们有三个第三方SDK,其中一个被检出存在openssl高危漏洞。SDK厂商的修复版本等了7个工作日才发布,这7天我们只能干等。
建议:检测前就梳理出所有第三方SDK的版本号,对照CVE漏洞库自查。发现有已知漏洞的SDK,提前准备替换或升级方案。
这个阶段的产出:最终版检测报告、漏洞修复确认书
检测方会对所有“已修复”的漏洞进行回归测试:
这是最容易被忽略的坑。
第一次修复完成后,我们通知检测方复测,对方回复“工程师排期已满,3天后才能安排”。3天等待期,加上复测本身2天,5天就没了。
建议:在项目启动时就和检测方约定好复测的时间窗口(比如“修复完成后48小时内启动复测”),写入合同或SOW。否则对方有权按自己的排期安排。
复测全部通过后,检测方出具最终版报告。这里注意:报告的资质章(CNAS、CMA)是否清晰可查、报告格式是否符合应用商店/等保测评的要求,都要逐项确认。
| 阶段 | 标准耗时 | 我们实际耗时 | 延误原因 |
|---|---|---|---|
| 需求沟通 | 3-5天 | 7天 | 检测范围边界沟通成本高、测试环境准备不足 |
| 环境搭建 | 2-3天 | 4天 | iOS企业证书签名问题 |
| 正式检测 | 5-10天 | 8天 | 业务逻辑漏洞需要开发配合解释 |
| 报告解读 | 1-2天 | 3天 | 漏洞分级争议需法务介入 |
| 漏洞修复 | 视情况 | 12天 | 第三方SDK等待修复、SQL注入反复修改 |
| 复测验证 | 2-3天 | 4天 | 检测方排期等待 |
| 总计 | 15-25天 | 38天 | —— |
实际项目从启动到拿到最终报告,我们用了38天,比理论周期多出近2周。
1. 倒推排期时,在检测方承诺的周期上乘以1.5倍
检测公司说的“15天出报告”通常只算检测执行+报告撰写,不包括需求沟通、环境准备、修复和复测。我们38天的完整周期是常态。
2. 把“复测等待期”写进合同
很多项目在修复完成后卡在“等检测方排期”。提前约定复测启动时间窗口,能省下至少3-5天。
3. 高危漏洞优先修,同时准备“降级方案”
如果上线前高危漏洞实在修不完,可以和检测方走风险接受(Risk Acceptance)流程——由双方技术负责人+业务负责人共同签字确认,明确“已知风险但不影响上线”,同时制定后续修复计划。但这个选项只在极少数场景适用,能用还是尽量修完。