安全与部署

您的文档永不离开您的服务器

Doconut 是一个您自行托管的 .NET 库,而不是您上传的文档服务。文件在您自己的基础设施内完全打开、渲染和提供——这正是它在受监管工作负载中可行的原因,因为文档本身永远不能跨越组织边界。

0
发送到 Doconut 的文档
100%
在您自己的服务器上渲染
离线
使用本地 .lic 文件进行授权

您的基础设施 — 信任边界

  1. 1

    您的应用程序

    从文件所在的任何位置读取文件:本地磁盘、网络共享、S3、Azure Blob、数据库列。

  2. 2

    Doconut 中间件

    在您的管道中使用 AddDoconut() 和 UseDoconut() 注册。运行在您的进程中,使用您的身份,在您的网络内。

  3. 3

    页面图像

    Viewer.OpenDocumentAsync() 渲染分页的页面图像并返回不透明的会话令牌。源文件从不交给浏览器。

  4. 4

    浏览器

    JavaScript 小部件通过会话令牌向您自己的端点请求页面。它从不看到文件路径、存储 URL 或原始字节。

渲染时从不接触

  • Doconut 服务器
  • 任何第三方转换 API
  • 任何云 OCR 或 AI 服务
  • 任何外部字体或资产 CDN

架构

文档实际去向

托管的查看器服务通过接收您的文件来工作。Doconut 通过从不接收文件来工作。文档由您自己的进程读取,由您自己的进程栅格化为页面图像,并由您自己的进程流式传输到浏览器——Doconut 是执行此工作的库,而不是传输的参与方。

安全模型

设计实际保证的内容

按构建方式本地部署

没有 SaaS 模式,也没有托管的后备方案。Doconut 以您引用的 DLL 形式提供;如果您的服务器离线,渲染仍然可以工作。缺少上传路径是架构的属性,而不是某人可以切换的配置设置。

不透明会话令牌

OpenDocumentAsync() 返回一个不透明的字符串,而不是文件路径或客户端可以篡改的标识符。浏览器无法枚举文档、猜测相邻的令牌,或将令牌重写为不同的文件。将令牌视为机密:绝不要记录它们,也不要在查看器之外在客户端持久化它们。

授权仍由您掌控

Doconut 从不决定谁可以读取文档。只有在您自己的授权检查通过后才调用 OpenDocumentAsync(),因此查看器会继承您应用程序已经实施的任何访问控制——角色、租户、记录级别权限,全部都包括在内。

文档不以文件形式离开

浏览器接收渲染后的页面图像,而不是源文档。能够查看合同的用户无法轻易导出原始 DOCX,泄露的页面图像也不包含源文件中的修订痕迹、批注、隐藏列或元数据。

受密码保护的文档

加密和受密码保护的文件在服务器端使用您代码提供的密码打开。密码仅在您自己的应用程序内部跨进程传递——绝不传递给客户端,也绝不传递给我们。

离线授权

授权是通过 options.LicensePath 或 Viewer.DoconutLicense(path) 解析的本地 .lic 文件。没有激活回调,也没有通过网络进行的运行时授权检查,这正是实现空气隔离部署的关键。

合规

Doconut 如何适应受监管的环境

在这里,诚实的框架比一堆标志更重要。Doconut 是一个库,而非服务提供商。我们从不接收、存储或处理您的文档,这意味着在您部署时我们不会成为处理者、子处理者或业务合作伙伴。这消除了整类文书工作——但部署相关的控制仍由您负责操作和提供证据。

HIPAA

由于受保护的健康信息从未到达 Doconut,因而不存在需要通过 BAA 进行覆盖的业务合作关系。记录和 DICOM 研究在您自己的环境中呈现。安全防护本身——访问控制、审计日志、静态和传输中的加密——仍然是您的责任,在您已经运行的应用程序中执行。

GDPR 与数据驻留

个人数据保持在您放置的地方。查看器不会引入跨境传输,因为根本没有传输:文档在您部署的服务器所在的同一司法辖区内读取和呈现。驻留成为托管决策,而非供应商谈判。

政府与国防

没有外部互联网访问的部署是一种受支持的配置,而非变通方案。将 DLL 和 .lic 文件打包,安装到安全区内,查看器将在许可证覆盖的版本范围内无限期运行。

我们不声称的内容

Doconut 并未宣传 SOC 2、ISO 27001 或 HITRUST 认证,您也不应将其表述为已认证。安全论点是架构性的:供应商从不出现在数据路径中。如果您的审计员需要控制叙述,这就是叙述。

部署

它可以运行的地方

Windows Server

经典的目标。IIS 或 Kestrel,运行在您自己的数据中心或您控制的云虚拟机上。

Docker

.NET 8 支持。将查看器作为您自己的镜像的一部分进行部署,并通过挂载的密钥将许可证文件排除在层之外。

Web 农场和分布式

负载均衡器后面的多个节点共享渲染缓存,因此在一个节点打开的会话在另一个节点仍然可读。

隔离的安全环境

安装后在任何时候都不需要外部连接——渲染、转换、授权都不需要联网。

运营

加固清单

这些都不陌生。它们是实际部署中最常出错的少数几件事,按它们通常出现的顺序排列。

  1. 1在打开之前先授权。仅在您自己的权限检查完成后才调用 OpenDocumentAsync()——查看器会愉快地渲染您提供的任何内容。
  2. 2将 .lic 文件置于源代码管理和容器镜像之外。将其存放在具有受限读取权限的目录中,并以密钥的形式挂载。
  3. 3永不记录会话令牌。它们应保存在内存和查看器配置中,而不是请求日志、APM 跟踪或错误报告中。
  4. 4限定资源端点。UseDoconutResources() 提供查看器资产——将其置于与应用程序其余部分相同的身份验证之后,而不是在管道的匿名分支中。
  5. 5为渲染缓存设定真实的生命周期。缓存的页面图像是敏感文档的派生副本;请按照符合您保留策略的计划将其清除。
  6. 6固定您的 DLL 版本并将其与许可证一起归档。许可证与版本范围绑定;将两者一起保存即可确保部署在五年后仍能启动。

我们实际收到的安全问题

文档会被上传到 Doconut 吗?

不。Doconut 是一个在您的应用程序内部运行的库。没有上传端点、没有托管的渲染层,也没有携带文档内容的遥测通道。如果您的服务器无法访问互联网,查看器仍然可以正常渲染。

用户可以从查看器下载原始文件吗?

不能通过查看器实现。浏览器接收由不透明会话令牌标识的渲染页面图像。如果您想要下载按钮,需要自行实现——这意味着是否发布源文件的决定仍然是您代码中的显式选择。

会话令牌到底是什么?

由 Viewer.OpenDocumentAsync() 返回的一个不透明字符串,JavaScript 小部件使用它来获取页面。它不是文档标识符、不是路径,也不是可以存储或重复使用的东西。请将其视为具有短生命周期的持有者凭证。

许可证会向外部报告吗?

不。授权通过本地 .lic 文件解析。没有激活调用,也没有周期性重新验证,这正是隔离环境安装能够工作的原因。

它能在完全没有互联网访问的情况下运行吗?

可以。渲染、转换和授权全部在本地完成。唯一需要互联网的地方是下载更新,您同样可以通过介质自行携带更新。

Doconut 是否通过了 SOC 2 或 ISO 27001 认证?

我们并未声称通过任一认证,您也不应将产品标榜为已认证。审计时相关的事实不同且通常更有力度:Doconut 从不出现在数据路径中,因此根本不存在供审计员评估的供应商环境。

密码保护的文档如何处理?

您的代码在服务器端打开文档时提供密码。密码在您自己的进程中用于解密,绝不会传输到浏览器或其他任何地方。

在您自己的网络中进行评估

请求临时许可证并在您自己的基础设施上运行 Doconut,针对您自己的文档,使用您自己的防火墙规则。这是唯一能够证明其价值的评估。

100% 在您自己的服务器上渲染