移除下载按钮可以支持仅查看工作流,但这并不能使可见文档无法被复制。安全的实现需要服务器端授权、受保护的存储、短时会话、细致的日志记录,以及对用户界面限制能够实现的内容有清晰的认识。
Doconut 提供用于业务应用的嵌入式 .NET 文档查看器。本教程阐述了相关的安全设计,且不发布猜测的配置属性或其他未文档化的 Doconut 源代码。

1. 定义“仅查看”意味着什么
从明确的策略开始。不同团队对“仅查看”的定义可能包括:
- 不提供原始文件下载。
- 不显示导出操作。
- 不允许打印。
- 仅在授权会话期间允许查看。
- 防止用户直接访问存储位置。
- 在文档打开时添加审计记录。
这些是独立的控制措施。确定哪些是必需的,并验证所选的 Doconut 产品、插件和许可证是否支持所需的查看器行为。
永远不要承诺可见文档无法被捕获。截图、相机、辅助工具、浏览器功能以及对显示像素的授权访问,使得绝对防止复制不切实际。
2. 保护原始文件
原始文档应保存在受保护的服务器端存储中。
- 服务器生成的文档标识符
- 受限的存储权限
- 必要时的静态加密
- 文档化的保留策略
- 对上传、查看、导出和管理进行独立的权限设置
不要向客户端发送存储凭证、未受限制的文件路径或永久的公共 URL。
3. 对每个文档请求进行授权
在 ASP.NET Core 中,使用标准的身份验证和授权机制来保护查看器路由。
服务器应验证:
- 用户已通过身份验证。
- 文档存在。
- 用户被允许查看该特定文档。
- 请求的操作对用户的角色和当前工作流状态是被允许的。
[Authorize] 特性可以保护路由,而策略、声明或基于资源的授权可以对特定文档作出决策。
授权还必须覆盖返回文档数据、页面、导出、注释或打印输出的任何端点。仅保护初始页面会使其他路径暴露。
4. 将查看和下载权限分离
显式建模权限,而不是从隐藏按钮推断。
例如:
CanViewDocumentCanDownloadOriginalCanExportDocumentCanPrintDocumentCanManageDocument
这些名称描述的是应用程序策略,而非 Doconut API。你的授权层应在服务器上评估它们,然后再执行相应的操作。
管理员可能拥有下载权限,而另一个已认证用户仅拥有查看权限。两个用户可以共享同一应用页面,却获得不同的授权功能。
5. 根据官方文档配置查看器
仅使用针对您应用中安装的确切 Doconut 版本在官方文档中记录的配置名称和集成步骤。
经验证的 Doconut 查看器页面 提供当前产品信息。 Doconut 下载和文档页面 提供安装资源和特定版本示例。
如果已安装的产品提供用于隐藏或禁用下载操作的受支持设置:
- 根据官方文档进行应用。
- 将其视为用户界面和工作流控制。
- 保持相关的服务器端点受保护。
- 测试未授权用户是否无法通过直接请求绕过它。
不要从无关文章中复制猜测的配置属性并假设它们受支持。
6. 将查看器集成置于服务层后面
专用的应用服务可以:
- 解析已授权的文档
- 通过批准的存储抽象打开它
- 应用受支持的查看器配置
- 释放流和临时资源
- 记录已清理的审计事件
- 向控制器返回安全错误
这使得 SDK 细节不出现在授权策略和呈现代码中。
标准的 .NET 类型,如 Stream、FileStream、CancellationToken 以及依赖注入的服务,可构成应用的边界。请遵循 Doconut 的官方文档调用 SDK。
7. 实施深度防御
仅查看工作流可以包括:
- 身份验证和资源级别授权
- 网络和存储隔离
- 短会话时长
- 受限的导出和打印路径
- 在支持且合适的情况下使用水印
- 文档访问的审计事件
- 速率限制和并发控制
- 明确的保留和清理规则
- 针对异常访问模式的安全监控
单一控制不足以保障安全。没有服务器保护的隐藏按钮尤其容易被绕过。
8. 记录访问而不泄露数据
有用的审计字段包括:
- 应用文档标识符
- 授权用户标识符
- 时间戳
- 请求的操作
- 结果
- 关联标识符
- 已清理的拒绝或失败原因
避免记录:
- 文档内容
- 存储凭证
- 访问令牌
- 敏感 URL
- 完整的服务器路径
- 不必要的个人信息
根据审计日志的敏感性和保留要求对其进行保护。
9. 测试绕过 UI 的尝试
不要在确认工具栏按钮缺失后就停止。
测试仅查看用户是否能够:
- 直接请求原始文件路径
- 调用导出或打印路径
- 更改文档标识符
- 重用已过期的会话
- 访问其他用户的文档
- 在标记或网络响应中发现存储 URL
- 触发泄露内部路径的详细错误
- 在权限被撤销后仍保持访问
包括自动化授权测试和手动浏览器测试。
10. 设定准确的用户期望
解释该策略的作用:
- 它限制应用提供的下载或导出工作流。
- 它将访问限制在授权用户范围内。
- 它可能记录查看事件。
- 它将原始文件置于服务器控制之下。
同时解释它无法保证的事项:
- 它无法在所有环境中阻止拍照或截图。
- 它无法撤回已被看到并记住的信息。
- 它不能取代合同、组织或终端安全控制。
这种区分使产品更可信,并帮助利益相关者为高度敏感的材料选择合适的控制措施。
验证清单
- 查看和下载使用独立的服务器权限。
- 每个文档请求执行资源级别授权。
- 原始文件没有永久的公共 URL。
- 查看器设置来源于已安装 Doconut 版本的文档。
- 隐藏的操作拥有受保护的服务器端点。
- 临时数据具有明确的清理流程。
- 审计日志避免记录文档内容和机密信息。
- 未授权的直接请求已通过测试覆盖。
- 错误响应不泄露内部存储细节。
- 产品文案不声称绝对防复制。
Doconut 的定位
Doconut 在 .NET 应用中提供嵌入式查看层。您的应用仍然负责身份、授权、权限、存储、保留、审计以及对“仅查看”承诺的真实性。
评估 Doconut .NET 文档查看器 SDK 与您的安全需求和代表性文档。使用 官方资源 获取受支持的配置,而不是依赖猜测的源代码。
结论
仅查看文档工作流是一种深度防御设计,而非布尔标记。保护原始文件、对每个请求进行授权、分离查看和下载权限、验证受支持的查看器设置、审计访问,并测试直接绕过界面的尝试。
有了这些控制,Doconut 可以提供嵌入式文档体验,而您的 ASP.NET 应用则在其周围强制执行安全策略。