结论先给:没有历史流量时,不要试图证明“哪个安全策略更有效”,而要构造能在小范围内被证伪的假设——把评估范围、观察信号和放弃条件事先写清。一个反例是:如果新业务连稳定的访问路径都还没有,任何以“流量变化”为信号的假设都会失效,此时应改用配置状态、变更记录或人工复核结论作为判据。
新业务常见的困境是:想同时回答“哪里不安全”和“改完有没有用”。前者属于资产与配置层面的判断,后者属于效果判断。没有历史流量时,效果判断缺少基线,只能退回到状态判断。
可操作的分法是:把每个待验证点写成“若某条件成立,则某处应出现某状态”。例如假设“对外表单未做输入长度限制”,验证动作是逐项检查表单字段配置,结果是发现若干字段可提交超长内容。这个结果不依赖流量,只依赖配置事实,因此对新业务成立。
反过来,若假设写成“加固后攻击尝试会减少”,就需要一段时间的观测数据。没有历史流量的新业务连正常请求量都难估计,攻击尝试归零也可能只是没人访问,不能单独证明加固有效。
两种做法都合理,但适用条件不同。
判断条件可以看一条:如果团队目前无法说清“哪些域名、哪些接口、哪些账号属于本次范围”,先定假设更省力;如果清单已经明确,全量扫描的信息量更大。
假设的写法要带可观察结果。例如“若后台登录入口未限制尝试次数,则连续多次错误提交后仍能继续尝试”。验证动作是人工在测试账号上重复提交,观察是否出现锁定或延迟。结果若为“仍可继续”,下一步就是确认这是设计选择还是配置遗漏,而不是直接判定为漏洞。
可验证不等于可证伪。一个假设要能被推翻,至少写清三件事:范围、信号、放弃条件。
假设示例:若某公开接口未校验调用来源,则从非授权页面发起请求仍会返回数据。验证动作是构造一次请求并记录返回;若返回数据,支持假设;若返回拒绝且日志有记录,否定假设。这里数字只用于说明比较方法,不构成任何效果承诺。
上面这套方法依赖一个前提:你能在可控条件下重复观察同一对象。如果新业务正在频繁改版,页面结构、接口参数和账号权限每天都在变,那么昨天成立的假设今天可能已不适用。
此时更稳的做法是把验证对象固定在一份版本快照上,先记录当前配置状态,再在变更后复核同一组检查项。若无法固定版本,就应把结论降级为“某时点的观察记录”,而不是普遍结论。
还需要注意:抓取、索引和排名是不同环节,安全评估的信号通常不来自这三者。把访问量下降直接归因于某次安全改动,往往忽略了改版、内容调整或外部链接变化等合理解释。
先写出一页假设清单,每行包含对象、预期信号、验证动作和放弃条件,只保留能在一天内完成验证的条目。完成第一轮后,把被否定的假设单独归档,因为它们往往指向你对系统行为的误判,比被证实的条目更有信息量。再根据剩余未覆盖的资产,决定是否需要转入全量扫描。