开源组件占了现代代码库的六到八成,平均每个代码库躺着 581 个漏洞、93% 含两年没人维护的【僵尸组件】;免费软件的账不在买它,在管它。
8-1 说清了后端由哪四层拼成,这一节紧接着回答一个现实问题:这四层里有大量是别人免费给你的代码,那这些代码由谁负责?教材 8-2 的并列关键词是【OSS、操作环境、更新、插件】——四件事里,后两件才是真正花时间的。
一、先接受一件事:现代应用大半不是自己写的
OSS 是开源软件(Open Source Software)的缩写——源码公开、可以自由使用和修改的软件。 免费是它的外表,可复用才是它真正的价值。
这份价值有多大,有机构算过:最常用的那批开源软件,如果要自己从零写一遍, 开发成本大约是 41.5 亿美元;而它支撑起来的业务价值到了万亿量级。 换句话说,整个数字经济的底座,是别人免费替你写好的。
代价也跟着来了。2026 年的开源安全与风险分析报告(OSSRA)审了 947 个商业代码库,结论是:
- 98% 的商业代码库里含开源组件——不用是不可能的。
- 开源组件占现代应用代码的 60%~80%——你写的只是最外面那一小层。
- 平均每个代码库有 581 个漏洞,同比涨了 107%。
- 平均每个代码库 84000 多个文件,同比涨 74%,五年翻了四倍。
这些数字里,最后一条变化最快,原因很直接:AI 编码助手在替人写代码。
二、操作环境与更新:免费软件真正花钱的地方
免费的软件要跑在什么地方,就是【操作环境】这一项。 它的选择往往在项目开始时就定了,之后很难改——换操作系统等于换一栋楼。
比选环境更麻烦的是【更新】。更新有三个象限,得分开对待:
- 安全补丁——立刻装,不留缓冲。
- 功能新版本——等几天再上,先看社区有没有人踩雷。
- 大版本升级——当项目排期做,要留回归测试的时间。
开源安全社区给这个做法起了个名字叫【缓冲期】: 安全补丁不等人,新功能版本可以等。
为什么新版本要等?因为供应链攻击最爱用的就是自动更新。 2026 年有一例很典型:一个 VS Code 插件在官方市场上线了 18 分钟就被下架, 但这一段时间足够让一名开着自动更新的员工装上它, 随后导致该企业内部约 3800 个代码仓库被窃取。 攻击者利用的不是你的疏忽,而是你【信任这个工具】这件事本身。
三、插件:最像【开关】也最像【后门】的一层
插件是最容易装、也最容易忘的一层。WordPress 生态的数据能说明问题:
- 插件贡献了约 91% 的新增漏洞,主题约 9%,核心程序只有极少数低危问题。
- 整个插件与主题生态累计被发现 64000 个以上漏洞。
- 2026 年全年 CVE 披露 48185 个,比 2024 年多了 20.6%。
为什么会这样?因为插件不在核心程序的安全审查范围内, 但它在你的站点里和核心拥有同等的执行权限。 装在门里的陌生人,比站在门外的陌生人危险得多。
还有一种更隐蔽的做法:有攻击者一次性买下了三十多个 装机量合计超过 40 万的成熟插件,然后在里面埋了一个后门, 安静地等了大约八个月才激活——此前所有更新检查都是通过得去的。 这说明【这个插件很多人用】不再是安全信号。
四、僵尸组件:最没人管的那一批
比漏洞更难处理的是【没人维护的依赖】。同一份报告里的数字:
- 93% 的代码库含两年内没有任何开发活动的组件。
- 92% 含落后四个大版本以上的组件。
- 实际在用的组件里,只有 7% 是最新版本。
- 95% 的漏洞落在传递依赖里——也就是你依赖的包所依赖的包。
最后一条最容易被忽略:你从来没有主动挑选过那 95%。 它们是被一层层捎带进来的,所以你甚至不知道该给谁提问题。
当这些包出了问题而原作者早已离开,组织只剩三条路: 自己接过来维护、把应用改掉绕开它、或者接受这个风险。 这不是技术问题,是维护预算问题。
还有 17% 的开源组件根本不是通过包管理器进来的—— 而是复制粘贴的代码片段、厂商直接塞进来的库、或者 AI 生成的代码。 这一类最危险,因为它们对常规扫描是隐形的。
五、动手 Demo:把用别人代码的代价算出来
先算两个倍数,再看漏洞数的涨幅——这两个数放一起,就能看清 2026 年的变化速度:
# 供应链攻击:2025 全年 vs 2026 上半年
print(" 批次 %.1f 倍,恶意包 %.1f 倍" % (37 / 14, 497 / 111))
print(" 平均每个代码库 581 个漏洞,比上一版 280 个涨了 %.0f%%" % ((581 / 280 - 1) * 100))
实跑输出:
--------------------------------------------------------------------
用别人的代码,代价写在哪儿
--------------------------------------------------------------------
免费不等于没有成本。Synopsys 的 OSSRA 报告每年审近千个商业代码库,
2026 年这一版把【用别人代码的代价】量化得很直接:
指标 2026 年的值
------------------------------------------------
含开源组件的商业代码库 98%
每个代码库平均漏洞数 581 个(同比 +107%)
每代码库平均文件数 84000+(同比 +74%)
每应用开源组件数 同比 +30%
有许可证冲突的代码库 68%(上年 56%)
------------------------------------------------
漏洞再多,也要看落在哪儿。分布是这样的:
范围 比例
--------------------------------
至少含一个漏洞的代码库 87%
含高风险漏洞的代码库 78%
含关键风险漏洞的代码库 44%
漏洞分布在传递依赖里 95%
--------------------------------
最后一行最容易被忽略:95% 的漏洞不在你亲手写的代码里,
而在【你依赖的包所依赖的包】里——它们不是你挑的,是被捎带进来的。
再往下是【僵尸组件】,也就是没人再维护的老包:
状况 比例
---------------------------------------
含两年内无开发活动的组件 93%
含落后四个大版本以上的组件 92%
用的组件是最新版本 只有 7%
组件绕过包管理器进来 17%
---------------------------------------
还有一条和 AI 直接相关:85% 的组织在用 AI 编码助手,
而在明令禁止的公司里,76% 承认开发者仍然在用。
代码产出快了,审查没跟上——代价就是上面那些数字。
更新和插件这一块,WordPress 生态是个活教材:
范围 占比
--------------------------------------------
插件带来的新增漏洞 约 91%
主题带来的新增漏洞 约 9%
核心程序带来的漏洞 极少,且多为低优先级
--------------------------------------------
为什么会这样?因为插件不在核心的安全审查范围内,
但它在你的站点里和核心一样有执行权限。
整个插件与主题生态累计被发现 64000 个以上漏洞;
2026 年全年 CVE 披露 48185 个,比 2024 年多了 20.6%。
供应链攻击的加速也很直观:
时段 攻击批次 恶意包
--------------------------------------
2025 年全年 14 起 111 个
2026 年上半年 37 起 497 个
倍数 2.6 倍 4.5 倍
--------------------------------------
所以【更新】这件事要分两半:安全补丁立刻装,新版本先等几天。
安全社区给出的做法叫【缓冲期】——补丁不等人,新功能可以等。
半年干完一年还多出两倍半,这就是这一节最该带走的感觉。 注意 581 这个数是【平均】——也就是说有一半的代码库比它还多。 而且它统计的只是【已知并被记录】的漏洞,不是全部。
30 秒实验
- 打开你常用的一个网站,F12 看它加载了哪些第三方脚本——那些就是它的【插件层】。
- 在自己电脑上找到任何一个用了一年以上的软件,去看它的版本号,再查这个版本还收不收安全更新。
- 想一下你手机里装的 App,有几个是自己写的、有几个是接的别人家的能力。
常见误区
- 错误:开源软件免费,所以安全。——纠正:免费和有没有人修是两件事;开源只是让问题能被看到,不保证有人去修。
- 错误:这个包很多人用,应该没问题。——纠正:装机量大恰恰让它成为高价值目标;买下成熟插件再埋后门是已经发生过的真实手法。
- 错误:自动更新开着最安全。——纠正:自动更新让补丁到达得快,也让恶意版本到达得快;安全补丁要快,新版本版本要有缓冲期。
自测三问(点开对答案)
1. OSS 的成本到底花在哪里? —— 不在买,在**维护**:更新节奏、版本升级、许可证合规、以及没人维护的依赖该怎么办。 2. 【僵尸组件】指的是什么? —— **两年内没有任何开发活动、或者落后四个大版本以上的依赖。** 93% 的代码库里有它们,而真正是最新版的组件只占 7%。 3. 插件为什么危险? —— **它在你的站点里和核心程序拥有同等权限,却不在核心的安全审查范围内。** WordPress 生态里约 91% 的新增漏洞来自插件。- ☐ 下一节(8-3 应用程序的设计理念:MVC模型、三层结构)
相关笔记
- Web应用后端的构成元素 —— 上一节拆出的四层里,免费软件占了大半
- 程序的启动 —— 程序怎么被加载起来,是理解依赖关系的前置
- 开源软件、许可协议-免费公开的源代码 —— 许可证这一课讲得更细
- 报告和共享系统漏洞信息 —— 漏洞是怎么被发现和公开的
- 设置用于攻击的后门 —— 埋在插件里的后门长什么样
- 🕸️ Web技术原理 · 索引