2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
不是重构。不是重写。而是重新思考。
而安全性的提升并非我预先计划的。它是正确思考问题后产生的结果。
在沉默中滋生的混乱
我们的平台处理所有类型的媒体文件。
用户头像。维护作业照片。租赁协议。检查报告。租务文件。合同文件。管理协议。入住状况报告。退租状况报告。
每一种都略有不同。有些允许多个文件。有些只允许一个。有些需要指定一张封面图片。有些需要排序。有些上传至文件传输协议(FTP)服务器。有些以画廊形式展示。有些以内嵌方式渲染为便携式文档格式(PDF)。有些生成安全下载链接。
在十多年的时间里,每一位接触到新媒体需求的开发人员都为此编写了新的代码。从来没有人停下来思考,在这些情况背后是否存在一个统一的本质。
当我仔细审视时,分散在代码库中的媒体处理代码已超过八万行。
但让我更为不安的并不是代码行数。
每位开发人员还编写了自己的验证逻辑。自己的文件类型检查。自己的大小限制。有些检查得当。有些检查不全。有些完全遗漏。有些仅在前端检查而未在后端检查。有些仅检查文件扩展名而未检查实际的文件签名。
八万行代码意味着存在八万个可能出现安全假设错误的地方。在一个为五万名用户处理法律文件和财务协议的平台上,这是不可接受的。
改变一切的问题
我并没有从查看代码开始。我从提出一个不同的问题开始。
不是“我们如何清理这些代码”,而是“在每一个案例中,实际上发生了什么?”
因此,我列出了系统中所有的媒体使用案例。全部列出。然后,我准确写下了它们之间的差异点。
以下是我的发现:
- 允许的文件格式(仅限图像、文档或任何文件)
- 最大文件大小(以兆字节为单位)
- 允许单次上传还是多次上传
- 是否可以将某个文件标记为封面
- 是否可以手动重新排序文件
- 文件的存储位置(本地、文件传输协议服务器、云端)
- 文件的显示方式(画廊、单张图片、便携式文档格式阅读器、下载链接)
- 下载是开放的还是通过令牌保护
仅此而已。八个要素。整个平台中的每一个媒体使用案例,仅仅是这八个要素的不同组合。
八万行代码。八个变量。
安全性洞察
当我写下这份清单时,令我震惊的是以下几点。
允许的文件格式和最大上传大小不仅仅是功能需求。它们是安全边界。而在旧系统中,这些边界存在于各个开发人员的实现中,分散在数十个文件中,由不同的人在不同时间以不同的严谨程度编写。
这是安全边界存在的最糟糕的位置。
当安全性依赖于代码时,其强度仅取决于最心不在焉的开发人员在状态最差时的表现。某人疲惫不堪,复制了一个模板,遗漏了文件类型检查,提交了代码,无人察觉,于是漏洞便静静地潜伏数月。
当安全性依赖于数据时,它由一个系统一致地强制执行,每次如此,涵盖所有案例,没有例外,也不依赖人的记忆。
因此,我做出的架构决策是:将安全边界完全从代码中移除,并放入数据库中。每种媒体类型都在单独的一行中定义其允许的格式和大小限制。组件读取 t
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。