三年架构设计:从0到10亿的程序员实战路径
|
去年五月那波漏扫报告出来时,我正盯着屏幕上跳动的进度条——98%卡了十分钟,茶水间的灯没关,打印机还在吐纸,隔壁工位的老张突然把键盘一推:「这破玩意儿又报假阳,上次说SQL注入,结果是个注释符号没转义。」我原以为他又要吐槽扫描器厂商,结果他指着报告里某条「未授权访问」的条目:「这个影响面写的是全量用户,可复现路径里连个请求头都没给,怎么处置?」
文章配图,仅供参考 这事儿我熟。三年前接手那个从0到1的项目时,第一版架构连WAF都没上,业务方催着上线,安全组只能用Nginx的规则硬扛。后来用户量破亿那天,日志里爬虫流量占了30%,风控组连夜加规则,结果把正常用户的登录接口给限流了——那晚我蹲在机房改配置,门禁嘀嘀嘀响个不停,保洁阿姨推着清洁车在走廊来回转,说「你们这灯怎么全开着」。回到老张的问题。那条「未授权访问」的漏洞,处置单上写着「建议加固」,可没说怎么加固。我翻了下代码,发现是某个内部接口没做权限校验,但调用方全是可信服务。按理说该加鉴权,可业务方说「改接口会影响三套下游系统,测试周期至少两周」。最后妥协方案是在网关层加IP白名单——结果第二周就收到风控告警,说某个内部服务换了出口IP,被拦截了。 所以你说「优胜劣汰」站得住脚吗?我见过太多这种场景:安全说「必须改」,业务说「先上线」,开发说「没时间」。最后往往是谁嗓门大谁赢——直到某天真的出事。去年有家同行被拖库,事后复盘发现半年前漏扫就报过存储型XSS,处置单上写着「影响面小,暂不修复」。结果攻击者用那个漏洞种了后门,等发现时数据已经流出去三波了。 但话说回来,完全按安全要求来也不现实。我们那个项目到第三年,用户量冲到10亿时,架构已经拆成微服务+边缘计算+多活数据中心。漏扫报告从每周几十条变成每天几百条,其中80%是「低危」——比如某个旧服务的HTTP头没加CSP,或者某个内部工具的Cookie没设HttpOnly。这些漏洞影响面确实小,可处置起来要跨三个团队,改一行代码得走十几个流程。有次我盯着某条「中间件版本过低」的漏洞,处置单在Jira里流转了两个月,最后因为「影响业务稳定性」被标记为「接受风险」。 窗外下了一下午雨,我桌上的旧笔记本风扇响得像拖拉机。老张凑过来:「你说这些漏洞到底该不该修?」我指着屏幕上那条「未授权访问」的记录:「这个得修,因为调用方虽然现在是可信的,但保不准哪天会开放给第三方。」他又问:「那那个XSS呢?」我顿了顿:「如果用户量只有十万,可能不修;但现在10亿,一个XSS就能挂马,影响面太大。」 可「影响面」怎么量化?去年等保检查时,审计方要求我们证明「所有高危漏洞都已修复」。我翻出漏扫历史记录,发现半年前有条「SSRF」的漏洞,处置单上写着「已修复」,但复现时发现还能打内网IP。开发说「当时改了代理配置,但没更新文档」,测试说「测试用例没覆盖这种边界情况」。最后审计方不认,我们只能连夜加补丁——那晚我加班到凌晨三点,打印机又在吐纸,门禁嘀嘀嘀响,保洁阿姨在群里问「谁的车没锁」。 跑题说个事。上周黑产用撞库攻击我们某个子系统,风控组拦截了90%的请求,但还是有部分漏网。事后查日志发现,攻击者用的密码里有一半是我的老密码——就是那个「123456+生日」的组合,我三年前就改了,但某个旧系统的数据库里还存着明文。这事儿不能怪安全组,也不能怪开发,只能怪我自己没把所有系统的密码都同步更新。 回到架构设计。从0到10亿的过程,本质是在「安全」和「效率」之间找平衡。你可以把所有接口都加上鉴权,把所有中间件都升级到最新版,把所有漏洞都立刻修复——但这样业务可能活不到第二年。我见过太多创业公司,安全投入占比超过20%,结果产品还没上线就资金链断裂。也见过太多大厂,为了赶进度放任漏洞堆积,最后被监管罚到股价暴跌。 所以「优胜劣汰」的关键,不是「有没有漏洞」,而是「能不能在漏洞被利用前修复」。我们现在的策略是:高危漏洞必须24小时内修复,中危漏洞两周内修复,低危漏洞排期修复——但前提是「影响面可控」。比如那个「未授权访问」的漏洞,虽然标记为高危,但调用方是内部服务,影响面小,可以放宽到一周;而那个「SSRF」漏洞,虽然处置单上写着「已修复」,但实际没复现成功,必须立刻重测。 可这套规则也有漏洞。比如有次开发为了赶进度,把某个高危漏洞的等级从「高」改成「中」,结果漏扫报告里没标红,处置流程走了普通通道,拖了两周才修复。等我们发现时,攻击者已经用那个漏洞扫了内网——虽然没造成损失,但足够让人后怕。 现在我的电脑弹了个更新提示,是某个安全插件的新版本。我点了「稍后提醒」,继续写这份处置报告。老张在旁边嘀咕:「你说这些规则到底有没有用?」我笑了笑:「有用,但得看执行的人。就像漏扫报告,扫出来是第一步,修不修是第二步,怎么修是第三步——而最关键的,是得有人盯着每一步。」 至于下一步怎么做?我打算推动个新流程:所有漏洞处置单必须附上「影响面评估报告」,由安全、开发、业务三方签字。如果影响面超过某个阈值,必须上CTO办公会讨论。至于能不能落地——就像三年前我们决定拆微服务时,所有人都说「不可能」,但现在不也跑起来了? (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


网站搭建总卡壳?14年程序员的多媒体运维避坑清单
网站构建秘籍:框架选型与架构设计原则
浙公网安备 33038102330484号