填补漏洞还是修复漏洞
漏洞这个词,填补在程序员嘴里分两种说法。漏洞一种叫“补”,还修一种叫“修”。复漏听起来差不多,填补实际上差远了。漏洞 上周我盯着一个线上商城的还修安全报告发愁。报告里写着“支付接口存在越权漏洞,复漏可查看他人订单”。填补我第一反应是漏洞加个判断,拦住非法请求。还修这属于“补”——在原有的复漏门上加把锁,锁住那个被撬开的填补洞。但锁完以后,漏洞我盯着那段代码看了半天。还修越权漏洞的根子,在于接口设计时根本没把用户身份当成一个独立实体来校验。你补了一百个入口,第一百零一个入口可能还是漏的。 “修”就不一样了。修意味着把接口拆开,重新设计鉴权逻辑,把用户身份校验下沉到框架层。所有接口默认必须先过身份验证,而不是每个接口自己写一遍“if user is None”。前者是给漏水的水管缠胶带,后者是换掉整段锈蚀的管道。 我见过一个老系统,三年里被“补”了二十多次漏洞。每次都是某个参数没过滤,某个文件没校验。安全团队疲于奔命,业务方骂骂咧咧。后来新来的技术负责人忍无可忍,花了两周时间重构了权限模块。从那以后,同类漏洞再没出现过。他说了一句话让我记到现在:“补漏洞是给债主还利息,修漏洞是还本金。你天天还利息,本金永远在那儿滚。” 但“修”不是总能做。业务跑得好好的,你突然说要重构核心模块,老板第一个不答应。时间、成本、风险,全是现实壁垒。所以很多时候,你得先“补”上,保证不出事,再慢慢找机会“修”。这不是妥协,这是生存策略。就像你家里墙裂了条缝,暴雨马上要来,你第一件事是拿胶带贴上,而不是拆墙重砌。等雨停了,你再琢磨是灌浆还是换砖。 我个人观察,技术团队里有个有趣的分野。年轻工程师喜欢“修”,觉得补丁代码不优雅,拿不出手。资深工程师反而对“补”更宽容,他们知道系统是长出来的,不是设计出来的。每个补丁都是一次对现实的理解,每一次修补都在为未来的重构积累数据——哪个入口被攻击得多,哪种校验方式容易漏,哪些业务逻辑根本不该暴露在公网上。 真正的高手,补的时候心里已经在想怎么修了。他们补得很快,但不会把补丁当成终点。补丁是临时止血,修是让伤口真正愈合。你问我要选哪个?我的答案是:先学会补,别让系统失血过多。但永远别骗自己说补完了就没事了。补得再好的漏洞,也还是漏洞。修完的代码,才叫没漏洞。
-
上一篇
-
下一篇