查找漏洞 补齐短板

凌晨两点,查找我盯着屏幕上那行报错日志,漏洞咖啡杯沿已经结了一圈褐色的补齐渍。这不是短板什么惊天动地的大故障,只是查找某个内部工具在特定权限组合下会静默丢失一条字段。但正是漏洞这种“不致命”的漏洞,往往最磨人——它不会让你系统崩溃,补齐却会在某个不经意的短板瞬间,让下游数据对不上账。查找

排查过程像剥洋葱。漏洞先怀疑缓存,补齐清了,短板没改善。查找再查接口文档,漏洞发现三个月前一次“小优化”把某个参数从必填改成了可选,补齐而调用方没有同步更新。没人记得那次改动是谁提交的,git记录显示是个周五下午,提交信息只有三个字:“调一下”。你看,漏洞从来不是突然出现的,它是无数个“先这样吧”叠起来的。

这事让我想起上个月巡检机房。运维老张蹲在角落的机柜前半天不动,我凑过去看,他正拿手电筒照着一根标签模糊的网线。“这根线跳了三年,没人知道它连的是哪台设备。”他扯了扯线头,另一头消失在吊顶里。后来我们花了整整一个下午,顺着线挨个端口试,才发现它连着的是台已经报废的旧服务器。你说它算漏洞吗?它没造成任何事故,但它就是一根悬在头上的线——哪天机房改造,谁不小心拔了它,谁也不知道会发生什么。

补短板这事,难的不是发现问题,是承认问题。上周代码评审,有个刚来的同事指着我写的模块说:“这里有个边界情况没处理,如果用户ID是负数呢?”我第一反应是“怎么可能有负数”,但嘴上没说,回去查了查——还真有,测试环境里有人手动插过一条脏数据。那个瞬间我挺惭愧的,写代码五年,自诩严谨,结果最基础的数据校验反而漏了。

其实很多短板就藏在“我以为”里。以为接口调用方会按文档传参,以为老设备不会有人动,以为周末的提交不会影响周一的业务。但现实总爱打脸。后来我们定了个规矩:每次发布前,必须有人扮演“最笨的用户”走一遍全流程,专门用那些不合常理的输入去试。刚开始大家觉得浪费时间,但真试出过几个问题——有个表单把“0”当空值过滤了,导致某个统计项永远少一条数据。

现在我的电脑桌面上贴着一张便签,写着“负数、空值、并发、超时”。这八个字是我那次教训的总结。每次写代码前看一眼,就像开车前系安全带,麻烦,但保命。漏洞这东西,补一个少一个,但永远别指望补完——因为代码在变,业务在变,今天觉得万无一失的地方,明天可能就成新的短板。所以与其说是在“补”,不如说是在“追”,追着变化跑,跑得比漏洞快那么一点点,就赢了。