2025年5月21日·阅读约1分钟

上传时的客户端加密 vs 服务器端加密

从威胁模型和用户体验权衡角度,解释上传时的客户端加密与服务器端加密,帮助在商业应用中存储合同、身份证和医疗文件时做出选择。

上传时的客户端加密 vs 服务器端加密

为什么为上传文档选择加密方式很重要

如果你的应用允许用户上传文件,你存储的往往不仅仅是“文档”。这些文件经常代表用户的第二重身份:签署的合同、护照或驾照照片、医疗表格和化验结果。文件本身可能很小,但其风险并不小。

一份泄露的合同可能引发法律和财务问题:定价公开、签名被复制、纠纷迅速恶化。被盗的身份证扫描可能导致身份盗用和账户接管。医疗文件可能暴露私人健康信息,用户原本不希望超出少数人圈子共享。一次错误就可能让信任受损多年。

团队常常说“加密存储”,但这可能指不同的事。有时他们指上传连接是加密的(HTTPS)。有时他们指文件在磁盘上是加密的(静态加密)。有时他们指文件在离开用户设备前就被加密,服务器从未看到明文(客户端加密)。这些并不等同,各自防护不同的失败场景。

安全选择也会影响日常可用性与支持。更多隐私通常意味着更多摩擦:查看文件需要额外步骤、共享更难、搜索与预览受限,当有人丢失设备或密钥时恢复痛苦。更容易的访问可以支持索引、杀毒扫描、预览和密码重置,但同时也增加了你的服务器(以及任何攻破它的人)能看到的内容。

想象一家小型诊所上传保险身份证和医疗 PDF。工作人员需要快速找到正确的文件,但诊所也希望在管理员账户被攻破时减少损害。哪种模型“正确”取决于最可能造成伤害的失败类型,以及用户能容忍多少不便。

简要定义:客户端加密 vs 服务器端加密

实际问题很简单:文件在哪被加密,谁能在之后解密?

服务器端加密意味着文件以可读形式到达你的后端,服务器在保存前对其加密。这就是静态加密:如果有人窃取了磁盘或获得了存储桶的原始访问,他们会看到的是乱序数据。你的服务器仍然可以在需要时解密该文件。

客户端加密意味着文件在用户设备(浏览器或移动端)上在上传前就被加密。你的服务器只存储密文。在正常情况下,除非服务器也能访问解密密钥,否则它无法读取文档。

密钥所有权是真正的分界线:

  • 在服务器端加密中,密钥由你的后端管理(通常通过密钥管理服务),后端为被授权用户解密文件。
  • 在客户端加密中,密钥由用户、其设备或客户端持有的秘密控制,后端主要负责存储和访问规则的执行。

在这两种模型中,你仍然需要身份验证和权限控制。加密不能替代访问控制。

人们也常把“端到端加密”用来描述:文件在发送者设备上加密,在服务器上保持密文,只有在经批准的接收者设备上才解密。这能提高保密性,但会让服务器端预览、全文搜索、病毒扫描和便捷恢复变得更困难,除非你愿意改变威胁模型。

威胁模型:你真正想阻止的是什么

加密只有在你明确希望降低的风险时才有意义。“除了预期用户没有人能读到文件”会导向不同的选择,相较于“如果存储泄露则减少损害”。

针对存储合同、身份证或医疗文档的应用,常见威胁包括:

  • 被盗或重复使用的密码(账户接管)
  • 内部访问权限过宽(支持、管理员、外包人员)
  • 云账户被攻破或存储桶配置错误
  • 导致数据库或备份泄露的漏洞
  • 用户设备上的恶意软件

同时将暴露发生的位置区分开也很有帮助:

  • 传输中: 文件从设备到服务器的过程中
  • 静态存储: 对象存储、数据库行、备份、日志
  • 查看/处理时: 预览、OCR、搜索、转换

核心区别如下。对于服务器端加密,你的系统可以解密,因此可以预览、扫描和索引。对于客户端加密,服务器存储的是密文,除非有用户持有的密钥,否则无法读取内容。这通常会缩小服务器妥协和内部访问的爆炸范围。

加密并不能阻止一切。如果设备被感染,恶意软件可以在加密前或解密后抓取文件。如果有人能查看文档,他们仍然可以截图、再分享或打印。

各模型能防护什么(以及不能防护什么)

一个有用的比较方式是问:在任何时候谁能看到文件的明文?这个答案决定了泄露影响、内部风险和备份安全性。

使用 服务器端加密 时,服务器被攻破仍可能暴露大量内容。后端通常能访问解密密钥(或能请求密钥),因为它需要生成预览、运行杀毒检查、支持搜索或处理共享。在最坏情况下,能同时获取存储数据和密钥的攻击者可以解密所有内容。

使用 客户端加密 时,攻击者如果攻破了你的基础设施,通常只能窃取加密的二进制块。没有用户持有的密钥,这些密文价值大大降低。

内部访问差异最明显。在服务器端加密中,特权员工、云管理员或被攻破的支持账户通常能通过模拟应用或查询存储来访问文档。在客户端加密中,基础设施可以存储和传输文件,但在没有提供密钥的情况下无法读取它们。

客户端加密不能修复被攻破的设备。对于像身份证和医疗 PDF 这样高风险的上传,设备安全和账户保护与存储加密同等重要。

还要关注“文件存储外”的泄露途径。许多事故通过以下方式发生:

  • 捕获已解密文件或密钥的备份与快照
  • 记录文件名、元数据或提取文本的日志
  • 缩略图、预览和搜索索引
  • 导出到邮箱、聊天或工单工具
  • 上传或转换过程中创建的临时文件

用户能立刻感知的体验权衡

原型化客户端加密的用户体验
在投入之前在真实应用中测试密码、密钥备份和恢复流程。
构建原型

最大的差异不是数学上的强度,而是用户能轻易做什么、什么变得困难。

服务器端加密通常感受上是透明的。用户登录、上传并能立即预览。支持可以重置访问。当有人休假时,管理员通常可以重新分配权限。

客户端加密会改变引导和日常工作。用户可能需要更强的口令、本地保管的密钥或额外的解锁步骤。换设备、清理浏览器或重装应用可能会中断访问,除非你提前规划了密钥备份和恢复。

账户恢复是让团队常常感到意外的地方。如果只有用户持有解密密钥,“忘记密码”可能变成“访问永久丢失”。你可以添加恢复密钥或托管托梭流程,但你需要诚实地说明其含义并清晰解释给用户。

共享也会更复杂。服务器端加密下,共享多是权限问题;客户端加密通常涉及密钥共享,并带来撤销和旧副本处理的问题。

搜索和便利功能可能会迫使某处进行解密。全文搜索、预览和 OCR 在服务器可以读取文件时最容易实现。如果你想要端到端风格的隐私,你可能需要在客户端做 OCR、本地索引,或接受有限的搜索(例如只搜索文件名和标签)。

示例:诊所上传化验 PDF 并希望通过 OCR 查找病人姓名。服务器端加密支持快速 OCR 和搜索。客户端加密则把这项工作推给用户设备,这在 Web 与移动端上更难兼容并支持。

针对特定文档的需求:合同、身份证和病历

最佳选择更多取决于工作流:谁需要阅读、多快、频率如何、保存多长时间。

合同

合同通常涉及审阅、修改痕迹、审批和审计轨迹。团队也希望可靠的搜索、共享和保留规则。

如果你的应用在产品内支持协作审阅,服务器端加密往往是实际的默认,因为系统能渲染预览、执行搜索并在无需用户管理密钥的情况下实施基于角色的访问控制。

如果应用更像一个保险库,例如仅为少数高管存储最终签署的 PDF,客户端加密也可以适用。代价是内建的便捷性会降低,除非你增加客户端工具链。

身份证(护照、驾照)

身份证风险高但通常是短期使用。很多团队只在验证人身份的短时间内需要它们,然后删除。

一种常见做法是服务器端加密,配合严格的访问控制、强审计日志和短期保留。如果支持人员绝对不应查看身份证,客户端加密是可选方案,但你需要另一套完成验证的办法。

医疗文档

医疗记录带有更高的隐私预期。用户通常假设只有最少必要的人能看到这些信息。

客户端加密能在服务器被攻破或管理员滥用访问时减少暴露。但它也会带来真实的用户体验和运维问题:密码重置、设备更换和紧急访问会变得复杂。

在做决定前,把每类文档映射到工作流上:

  • 谁必须读取(从哪里)
  • 要多快加载
  • 保留多长时间
  • 哪些产品功能重要(预览、搜索、自动删除)

如何选择:逐步决策流程

添加访问审批步骤
设计谁可以查看、下载或共享文档,并记录清晰的操作日志。
创建工作流

先写下你存储的内容以及触及这些内容的人员。一堆叫做“uploads”的文件夹不是政策。

第一步:映射访问,而不仅仅是“用户”

列出角色并回答两个问题:谁必须能打开文件,谁绝对不能打开(包括管理员)?同时考虑保留策略。

第二步:选择你的威胁假设

明确你在防御什么。

  • 如果内部风险是首要关注点,客户端加密会更有吸引力。
  • 如果设备丢失和密码重置常见,你将在恢复复杂性上付出代价。

然后对体验进行压力测试:

  1. 恢复与支持: 当有人忘记密码或丢失手机时会怎样?如果必须恢复访问,纯客户端加密可能不适合。

  2. 必需功能: 你是否需要预览、搜索、OCR、电子签名或基于 API 的处理?这些功能中很多在某处有服务器端解密会更简单。

  3. 审计与合规: 你是否需要清晰的谁在何时访问了什么的日志?两种模型都可以记录访问,但客户端设计需要额外注意以避免“我们帮不了你”的结果。

大多数团队最终采用混合方案:对大多数文档使用服务器端加密,对少数“员工绝不可见”的上传使用客户端加密。

常见错误与陷阱

让管理员保持在正确的权限范围内
实施最小权限原则,减少对敏感文件的广泛访问。
定义角色

最大陷阱是把加密当作全部解决方案。隐私与合规还取决于谁能访问数据、如何批准访问、如何记录日志、保留多久以及如何处理删除请求。

第二个常见错误是在没有恢复计划的情况下构建客户端加密。如果用户丢失设备、忘记口令或离职,你能否在不破坏安全承诺的情况下恢复访问?“我们帮不了你”也许对个人保险库可以接受,但在商业应用中通常行不通。

这些错误会导致真实的泄露和应对绕道:

  • 给管理员一个隐蔽的“查看所有”的通道,或让支持能冒充用户而没有严格日志和第二人审批。
  • 在浏览器或应用中解密并留下副本(缓存的预览、临时下载、同步的文件夹)。
  • 之后通过不安全通道发送“安全”文档(通过邮件发送 PDF、把截图粘到聊天、把文件附到工单)。
  • 让安全流程太难以至于用户转而使用个人云盘或拍下屏幕照片。
  • 认为“静态加密”自动满足同意、访问历史、保留和泄露报告要求。

示例:一家诊所对入职表单加密,但工作人员导出计费报告时产生了一个未加密的本地文件夹。该文件夹被备份到共享驱动器。泄露发生在工作流中,而不是密码学上。

在做出决定前的快速检查清单

写一句简单的话:谁应该能读取这些文件,谁即便获得你服务器也永远不该能读取?

然后检查:

  • 谁能解密,何时能解密? 列出具体角色和条件。如果政策写着“只有上传者”,不要悄悄通过共享密钥开后门。
  • 你能否快速撤销访问? 离职是检验真相的试金石。决定访问是绑定到账户、设备还是团队。
  • 设备丢失或密码重置后会怎样? 如果你需要恢复,用强审批来保护恢复流程。
  • 你是否需要预览、病毒扫描或 OCR? 如果需要,规划解密发生的位置以及谁能触发它。
  • 你的审计日志够详细吗? 定义什么算“查看”与“下载”,并记录用户、时间、设备和理由。

示例场景:一个小团队存储身份证和医疗 PDF

部署到数据所在的地方
在 AppMaster Cloud、AWS、Azure 或 Google Cloud 上运行你的应用。
立即部署

一家小诊所的应用中,工作人员上传病人转诊(PDF)和保险身份证照片。目标是把文件快速传给正确的人,同时减少设备丢失、账户泄露或云端错误的损害。

一种可行方法是使用服务器端加密并配合严格的角色划分。文件静态加密,访问由权限控制:前台可以上传,账单可以查看身份证,临床人员可以查看转诊。这在日常运行中更简单,因为工作人员能在桌面或手机上无需额外步骤打开文档,主管也能在有人休假时重新分配访问。

另一种方法是在最敏感的项目上采用客户端加密。文件在设备上加密后再上传,服务器只存密文。这能缩小服务器泄露和内部访问的影响,但会改变操作流程:

  • 密码重置在服务器端加密下通常能恢复访问;在客户端加密下,重置可能导致用户被锁定,除非密钥已安全备份。
  • 员工离职在服务器端加密下更容易处理;在客户端加密下,你需要计划如何转移或托管密钥以确保文档可继续访问。

用户会在共享、移动访问和丢失手机后的恢复等方面感到摩擦。这些细节和加密模型本身一样重要。

接下来的步骤:决定、记录策略并实施

先用白话写下你的威胁假设。选择最简单且满足风险需求的方法,然后只在真正需要保护的文档上加强措施。

把决定写成一套简短的内部规则,方便团队遵循:

  • 允许哪些文件类型、存在哪里
  • 谁可以访问与共享,以及如何批准访问
  • 保留与删除规则
  • 密码重置与设备丢失后的恢复机制
  • 导出(下载、邮件、消息)如何处理以及何时阻止

然后围绕这些规则设计实现:基于角色的检查、可审计的操作(查看、下载、共享)、安全的预览以及谨慎的密钥处理。

如果你在像 AppMaster(appmaster.io)这样的无代码平台上构建,早期将角色与审批流程建模有助于在不重写整个应用的情况下随着需求变化进行调整。关键是让安全路径成为真实用户的便捷路径。

常见问题

什么时候应该选择客户端加密而不是服务器端加密?

当你需要顺畅的预览、OCR、病毒扫描和便捷的账户恢复时,使用 服务器端加密。当你更看重减少内部风险并限制服务器可见内容而愿意接受更多不便时,使用 客户端加密

HTTPS 等同于上传的“加密存储”吗?

不是。HTTPS 保护文件在网络传输过程中的安全(传输中)。你仍然需要**静态加密(encryption at rest)**和良好的访问控制来保护存储、备份和内部系统中的文件。

服务器端加密实际能防护什么?

服务器端加密主要在有人获得原始存储访问权(比如泄露的存储桶、被盗磁盘或暴露的备份)时提供保护。它不能阻止能够访问你的后端或密钥的人解密文件。

客户端加密实际能防护什么?

客户端加密在服务器、管理员或云账户可能被攻破的情况下最有帮助,因为服务器只存储密文。但它无法防护用户设备被感染的情况,或用户主动分享已解密的文件。

如何在客户端加密下处理密码重置和设备丢失?

如果不设计恢复机制,用户在设备丢失、浏览器重置或忘记密码后可能永久无法访问。一个安全的默认做法是设计明确的恢复方法(比如恢复密钥或经过审批的托管/托梭方案),并诚实地解释其中的权衡。

加密选择如何影响与同事共享文件?

服务器端加密下,共享主要是权限控制,因为服务器可以为被授权用户解密。客户端加密通常需要密钥共享与撤销机制,这会增加团队访问和离职交接的复杂性。

客户端加密会破坏 OCR 和全文搜索吗?

通常会影响。OCR 和全文搜索需要读取文档内容。采用客户端加密时,你要么把这些工作放在设备端完成(更难跨 Web 与移动支持),要么接受受限的搜索(例如只支持文件名和标签)。

存储护照或驾驶证上传时最佳做法是什么?

如果工作人员需要快速查看身份证并进行验证,默认采用服务器端加密并配合严格的角色控制、短期保留和强审计通常是合理的。只有在你确定工作人员永远不应查看身份证且有替代验证流程时,才考虑客户端加密。

与其他文档类型相比,合同应如何处理?

如果你需要团队内协作(审阅、批注、审批、审计追踪、预览),服务器端加密通常是更实用的基线。如果只是小群体的私有保险库,客户端加密也可行,但要为访问与共享付出额外代价。

为我的应用选择加密模型的简单方法是什么?

先列出每类文档必须能被谁打开,以及即便有管理员权限也绝对不能被谁打开。然后决定在哪一端允许解密(服务器、客户端或两者),定义保留策略,并确保日志能记录查看与下载事件。

容易上手
创造一些 惊人的东西

使用免费计划试用 AppMaster。
准备就绪后,您可以选择合适的订阅。

开始吧