一、你的软件,有一半不是你的
"小陈,猜猜云间荐书 Pro 的代码里,有多少行是我们自己写的?"老周问。
小陈想了想:"大部分吧?核心算法都是咱们的呀。"
"错。"老周打开依赖清单,"现代软件平均 80% 的代码来自第三方——开源库、框架、工具包。你的软件就像一栋楼,自己只盖了 20%,剩下 80% 用的是'预制板'。每一块预制板都有它的版权、它的漏洞、它的维护者。 管理这些'外来户',就是软件资产管理(Software Asset Management)。"
"而这里面最大的定时炸弹,叫 Log4j——2021 年一个 Java 日志库爆出的漏洞,全球数亿台设备受影响,修复持续了几个月。一个不起眼的第三方组件,能击穿整个公司的安全防线。"
二、SBOM:软件的"物料清单"
"管理第三方组件的核心工具:SBOM(Software Bill of Materials,软件物料清单)。"老周说:
SBOM = 软件的"配料表"/"物料清单"
就像食品包装上的成分表,SBOM 列出:
- 用了哪些第三方组件
- 每个组件的版本
- 每个组件的许可证类型
- 组件的来源(从哪拉的)
为什么重要:
① 合规:知道每个组件的许可证(第四章的债)
② 安全:知道每个组件有没有漏洞(Log4j 时能立刻自查)
③ 供应链:组件被投毒/被移除时,知道受影响范围
怎么生成:
工具自动生成(npm audit / pip-audit / Syft / Trivy)
例(Syft 扫描结果片段):
NAME VERSION LICENSE
flask 2.3.2 BSD-3-Clause
requests 2.31.0 Apache-2.0
log4j-core 2.14.1 Apache-2.0 ⚠️ 有 CVE 漏洞!
"一句话:SBOM 就是软件的'体检报告 + 配料表'——知道你吃了什么、有没有问题。政府和企业采购软件时,现在越来越要求提供 SBOM(美国 EO 14028 已强制要求联邦供应商提供)。"
三、第三方组件的三大风险
老周列出必须管理的三类风险:
第三方组件三大风险:
① 许可证风险(法律)
GPL/AGPL 混入商业软件 → 可能被迫开源
缺失版权声明 → 违约
→ 对策:许可证白名单/黑名单 + 扫描(第四章)
② 安全漏洞(技术)
Log4j、Struts2、OpenSSL 心脏滴血……
→ 对策:漏洞扫描(Trivy/OWASP Dependency-Check)
+ 及时升级
③ 供应链投毒(安全)
开源组件被恶意篡改后重新发布(如 ua-parser-js 事件)
开发者拉错"李鬼"包 → 代码被植入后门
→ 对策:锁定版本(lock 文件)、校验哈希、
只从官方源拉取、镜像仓库托管(Docker 季讲过)
云间书店的整改:
Trivy 扫出 3 个高危漏洞组件(含 1 个 Log4j 同类)
→ 一周内升级修复
→ 建立"依赖升级月度巡检"制度
"第三方组件管理的本质:你的软件安全,取决于你'用到的所有人'的安全。 一个没人维护的老库,就是你软件里的一颗定时炸弹。"
四、数据合规:软件还要守住"数据"的底线
"除了代码和组件,软件合规还有一个大头:数据处理。"林薇接话,"软件收集用户数据,就要遵守《个人信息保护法》《数据安全法》。"
数据合规要点(个保法核心):
① 最小必要:只收集业务必需的数据(别乱收集)
② 告知同意:收集前告知用户,取得同意(隐私政策)
③ 安全存储:敏感数据加密、分级管理
④ 出境合规:数据出境要评估/申报(跨国 SaaS 注意)
⑤ 用户权利:查询、更正、删除权(用户要删你得能删)
云间书店的数据合规动作:
✅ 更新隐私政策(明确收集什么、怎么用)
✅ 数据分级:普通(书名/价格)/ 敏感(手机号/地址)
✅ 敏感字段加密存储 + 访问留痕
✅ 提供"注销账号+删除数据"入口(法律要求!)
⚠️ 之前测试环境用了真实用户数据(已整改为脱敏数据)
"数据合规不是'多此一举'——违反个保法最高可罚 5000 万或上年营收 5%。 对于 SaaS 公司,数据合规和知识产权保护是并行的两条生命线。"
五、软件资产盘点:公司到底有哪些"软件家底"
"最后,把'软件资产'当成财务资产一样管理。"林薇说,"很多公司根本说不清自己有多少软件、版权归谁、License 花了多少钱。"
软件资产管理(SAM)四步:
① 盘点:公司有哪些软件?哪些自研/采购/开源?
→ 自研:著作权登记了没?专利布局了没?
→ 采购:授权数够不够?(超用=违约)
→ 开源:许可证合规了没?(SBOM)
② 权属:每款软件版权归谁?(合同里写清了吗)
③ 成本:License 花了多少?有没有重复采购?
④ 治理:谁负责维护?更新策略?退役策略?
云间书店的软件资产台账(示例):
├── 自研:云间荐书 Pro(著作权已登记,专利在申请)
├── 自研:网店系统(著作权待登记 ← 补)
├── 采购:某 BI 工具(授权 50 用户,用了 47 ← 够)
├── 采购:某协作软件(授权 30 用户,实际 60 ← 超标违约!)
└── 开源:37 组件(SBOM 已建立,GPL 已清理)
"软件资产也是公司的真金白银——值钱的(自研 IP)要保护,花钱的(采购授权)要管好。 很多公司被软件厂商审计罚款,就是'用了没买够'(过度使用授权)。"
六、合规自动化:把规矩写进流水线
老周最后给出技术落地方案——把合规变成"机器强制":
合规自动化(CI 流水线加关卡):
① 依赖扫描关卡(每次构建自动跑):
Trivy / npm audit / pip-audit
→ 高危漏洞 → 构建红灯(不许发布)
→ 许可证违规 → 红灯(不许合并)
② SBOM 自动生成:
每次发版自动生成 SBOM 文件,存档可查
③ 密钥扫描:
扫描代码里的明文密钥/密码 → 红灯拦截
④ 依赖更新提醒:
Dependabot / Renovate 自动提升级 PR
效果:
手工合规:靠人自觉(会漏)
自动化合规:机器把关(不漏,一次到位)
"合规的最高境界,不是'出了问题再整改',而是'让违规根本发生不了'——把规则写进 CI,违规代码根本进不了生产线。这是我们上一季在 Docker 和 CI/CD 里学过的思想:把过程自动化,把规矩代码化。"
七、章末:老周和林薇的第八层总结
第八层:合规与软件资产管理
├── 真相:80% 代码来自第三方(都是"外来户")
├── SBOM:软件物料清单(配料表+体检报告)
├── 第三方三大风险:许可证违规 / 漏洞 / 供应链投毒
├── 数据合规:个保法(最小必要/告知同意/加密/删除权)
├── 资产盘点:自研(确权)采购(授权数)开源(合规)
└── 自动化:依赖扫描/SBOM/密钥扫描写进 CI(机器把关)
第十层(预告):侵权判定与维权 —— 该和"知心书坊"算账了
"家底盘完了,该面对的还是要面对。"林薇合上笔记本,"云间书店的代码防弹衣穿好了、水印装好了、家底理清了——现在,是时候处理那两件事了:9.9 元破解版,和知心书坊的'致敬'。"
"法律上,怎么判定他们侵权?怎么固定证据?怎么起诉?能要回多少赔偿?"老周说,"下一章——侵权判定与维权。林姐教你打一场漂亮的'软件保卫战'。"