🕸️ 第八章 Web系统的开发原则
📄 一句话概括

开源组件占了现代代码库的六到八成,平均每个代码库躺着 581 个漏洞、93% 含两年没人维护的【僵尸组件】;免费软件的账不在买它,在管它。

📝 本节和前面几节的关系

8-1 说清了后端由哪四层拼成,这一节紧接着回答一个现实问题:这四层里有大量是别人免费给你的代码,那这些代码由谁负责?教材 8-2 的并列关键词是【OSS、操作环境、更新、插件】——四件事里,后两件才是真正花时间的。

一、先接受一件事:现代应用大半不是自己写的

OSS 是开源软件(Open Source Software)的缩写——源码公开、可以自由使用和修改的软件。 免费是它的外表,可复用才是它真正的价值。

这份价值有多大,有机构算过:最常用的那批开源软件,如果要自己从零写一遍, 开发成本大约是 41.5 亿美元;而它支撑起来的业务价值到了万亿量级。 换句话说,整个数字经济的底座,是别人免费替你写好的。

代价也跟着来了。2026 年的开源安全与风险分析报告(OSSRA)审了 947 个商业代码库,结论是:

这些数字里,最后一条变化最快,原因很直接:AI 编码助手在替人写代码。

二、操作环境与更新:免费软件真正花钱的地方

免费的软件要跑在什么地方,就是【操作环境】这一项。 它的选择往往在项目开始时就定了,之后很难改——换操作系统等于换一栋楼。

比选环境更麻烦的是【更新】。更新有三个象限,得分开对待:

开源安全社区给这个做法起了个名字叫【缓冲期】: 安全补丁不等人,新功能版本可以等。

为什么新版本要等?因为供应链攻击最爱用的就是自动更新。 2026 年有一例很典型:一个 VS Code 插件在官方市场上线了 18 分钟就被下架, 但这一段时间足够让一名开着自动更新的员工装上它, 随后导致该企业内部约 3800 个代码仓库被窃取。 攻击者利用的不是你的疏忽,而是你【信任这个工具】这件事本身。

三、插件:最像【开关】也最像【后门】的一层

插件是最容易装、也最容易忘的一层。WordPress 生态的数据能说明问题:

为什么会这样?因为插件不在核心程序的安全审查范围内, 但它在你的站点里和核心拥有同等的执行权限。 装在门里的陌生人,比站在门外的陌生人危险得多。

还有一种更隐蔽的做法:有攻击者一次性买下了三十多个 装机量合计超过 40 万的成熟插件,然后在里面埋了一个后门, 安静地等了大约八个月才激活——此前所有更新检查都是通过得去的。 这说明【这个插件很多人用】不再是安全信号。

四、僵尸组件:最没人管的那一批

比漏洞更难处理的是【没人维护的依赖】。同一份报告里的数字:

最后一条最容易被忽略:你从来没有主动挑选过那 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 秒实验

  1. 打开你常用的一个网站,F12 看它加载了哪些第三方脚本——那些就是它的【插件层】。
  2. 在自己电脑上找到任何一个用了一年以上的软件,去看它的版本号,再查这个版本还收不收安全更新。
  3. 想一下你手机里装的 App,有几个是自己写的、有几个是接的别人家的能力。

常见误区

  1. 错误:开源软件免费,所以安全。——纠正:免费和有没有人修是两件事;开源只是让问题能被看到,不保证有人去修。
  2. 错误:这个包很多人用,应该没问题。——纠正:装机量大恰恰让它成为高价值目标;买下成熟插件再埋后门是已经发生过的真实手法。
  3. 错误:自动更新开着最安全。——纠正:自动更新让补丁到达得快,也让恶意版本到达得快;安全补丁要快,新版本版本要有缓冲期。
自测三问(点开对答案) 1. OSS 的成本到底花在哪里? —— 不在买,在**维护**:更新节奏、版本升级、许可证合规、以及没人维护的依赖该怎么办。 2. 【僵尸组件】指的是什么? —— **两年内没有任何开发活动、或者落后四个大版本以上的依赖。** 93% 的代码库里有它们,而真正是最新版的组件只占 7%。 3. 插件为什么危险? —— **它在你的站点里和核心程序拥有同等权限,却不在核心的安全审查范围内。** WordPress 生态里约 91% 的新增漏洞来自插件。

相关笔记