没有历史流量时,恶意点击防护无法靠“点击率异常”来验证,因为正常基线本身还不存在。可行的做法是把假设从“有没有攻击”改成“防护规则是否按预期动作”:用人工构造的流量触发规则,观察日志、拦截记录和真实用户路径是否一致。这样得到的结论只能证明规则生效,不能证明线上一定存在恶意点击。
恶意点击防护的核心判断依赖对比:同一来源在短时间内的点击频次、同一设备标识的重复行为、点击到转化的时间分布。新业务这些数据都接近空白,任何“异常”都缺少参照。此时若直接按行业常见阈值上线拦截,可能把真实的首批用户挡在外面,而团队还以为防护起了作用。
因此第一阶段的目标不是拦截,而是建立可复现的判定链条:什么输入、经过哪条规则、产生什么记录、对真实用户有什么影响。链条跑通之后,才有资格谈保留、改写还是退出。
假设可以写成这种形式:“如果同一来源在十分钟内对同一落地页产生超过若干次点击,规则应记录并标记,但不直接阻断。”这里的数字只是示例,实际取值由你的业务节奏决定。
验证动作可以这样设计:
如果日志里高频请求被正确记录,而正常访问没有触发拦截,这个假设就通过了第一轮。它不能推出的结论是:线上真实流量中一定存在恶意点击,或者防护已经挡住了真实攻击。合成流量只能证明规则逻辑,不能证明外部行为。
当规则在合成测试中稳定触发、误伤可控,且你能在日志中区分“标记”和“阻断”两种结果时,可以保留规则并进入观察期。观察期的判断依据不是拦截数量,而是真实用户的完成率有没有同步下降。如果完成率下降而拦截量上升,优先怀疑误伤。
当规则频繁触发但无法区分来源、或拦截后真实用户无法完成关键动作时,应改写而不是加码。改写的方向通常是放宽阈值、把阻断改为记录、或增加一层人工确认。改写的代价是防护强度下降,收益是保留真实流量。这个取舍适合转化路径短、单次点击价值高的业务。
当规则依赖的数据在当前权限或工具条件下拿不到,比如看不到请求日志、无法按来源聚合,继续投入只会产生无法验证的结论。此时退回到“只记录不拦截”或暂时停用,把精力放回内容与页面本身,是更诚实的选择。退出不等于放弃防护,而是承认当前不具备验证条件。
假设某新业务只有一个落地页,日均访问量很低。团队设定规则:同一来源十分钟内超过五次点击则记录。人工测试后,日志中出现了记录条目,正常访问没有记录。基于这个结果,下一步不是提高拦截强度,而是把记录字段补全:来源、时间、页面、是否完成提交。补全之后,才能在真实流量出现时判断记录条目是否伴随转化下降。如果记录条目增加而转化不变,说明规则可能只是捕捉到了正常的高频浏览;如果转化同步下降,才需要检查是否误伤。
这里的关键动作是补字段,而不是加规则。字段补全的结果直接决定下一轮该保留还是改写。
拦截记录归零、日志突然安静、某个来源消失,这些现象可能有多种解释:规则未触发、日志未采集、流量本身减少、或采集权限变化。它们不能单独证明防护正确,也不能单独证明攻击停止。要交叉看至少两个信号,比如记录数量与真实提交数量是否同向变化。缺少交叉验证时,宁可把结论写成“当前无法判断”,也不要写成“防护有效”。
没有历史流量的阶段,恶意点击防护的价值不在于挡住多少,而在于让你清楚每条规则在什么条件下成立、在什么条件下必须改写或退出。先把判定链条跑通,再谈强度。