一、为什么文档安全是企业数字化办公的"生死线"
在企业信息化建设中,Office文档承载着大量核心数据:合同条款、财务报表、技术方案、客户资料、战略规划等。一旦敏感文档泄漏,轻则造成商业损失,重则触犯法律法规。
传统的文档安全手段往往局限于文件层面的加密或权限控制,而忽略了在线编辑场景下的安全挑战:
- 截图泄漏:用户通过截图工具将文档内容传播出去,几乎无法追踪
- 复制外泄:用户将文档内容复制到外部应用(微信、邮件等),防不胜防
- 权限粗放:要么全部可编辑,要么全部只读,无法按业务需求精细控制
- 溯源困难:文档泄漏后,难以定位是谁在什么时候泄漏的
OnlyOffice 中国版针对这些痛点,提供了一套完整的安全增强方案。本文将结合实际业务场景,讲解如何利用这些功能构建多层文档安全防护体系。
二、安全防护能力全景
OnlyOffice 中国版在官方社区版基础上,增强了以下安全能力:
| 防截图水印 | |||
| 内部剪切板 | |||
| 用户只读模式 | |||
| 动态切换权限 | |||
| 个性化配置 | |||
| JWT认证 | |||
| 长轮询降级 |
这些能力可以组合使用,形成纵深防御体系。
三、场景一:OA系统中的公文安全预览
3.1 业务需求
某政务OA系统需要实现公文的在线预览功能,核心安全要求:领导审阅公文时,文档内容不可复制到外部;预览界面必须显示当前查看人的姓名和IP,防止截图传播;用户不能下载或打印原始文件;界面要简洁,去掉不必要的菜单按钮。
3.2 技术方案
第一层:防截图水印
通过 editorConfig.customization.waterMark 配置覆盖型水印:
{
"editorConfig": {
"customization": {
"waterMark": {
"value": "张三(工号:10086)\\n192.168.1.100\\n2026-04-12 14:30",
"fillstyle": "rgba(192, 192, 192, 0.3)",
"font": "18px SimHei",
"rotate": -25,
"horizontal": 50,
"vertical": 50,
"opacity": 0.3
}
}
}
}📌 实际开发要点
• 水印文字内容应从后端动态生成,包含当前用户姓名、工号、IP、时间等信息
• 不同安全等级的文档可配置不同的水印密度和透明度
• 机密文档建议使用较低透明度(如 0.2),使水印更明显
第二层:内部剪切板
通过 document.permissions.copyOut 禁止内容复制到外部:
{
"document": {
"permissions": {
"copy": true,
"copyOut": false,
"print": false,
"download": false
}
}
}copyOut 与 copy 的关系:copyOut 是 copy 的子权限,只有当 copy 为 true 时,copyOut 的设置才有效:
▶ 配置建议:安全场景下建议显式设置 copy: true, copyOut: false,既允许用户在文档内部操作,又防止内容外泄。
第三层:界面精简
通过个性化配置隐藏不必要的界面元素:
{
"editorConfig": {
"customization": {
"about": false,
"feedback": false,
"goback": false,
"help": false,
"plugins": false
}
}
}3.3 完整配置示例
// 后端构建开档配置(伪代码)
function buildEditorConfig(user, document, clientIp) {
return {
document: {
fileType: document.ext, key: document.versionKey, title: document.title, url: document.downloadUrl,
permissions: { edit: false, copy: true, copyOut: false, print: false, download: false, comment: false }
},
editorConfig: {
mode: "view", lang: "zh",
customization: {
about: false, feedback: false, goback: false, help: false, plugins: false,
waterMark: {
value: `${user.name}(${user.employeeId})\\n${clientIp}\\n${formatTime(new Date())}`,
fillstyle: "rgba(192, 192, 192, 0.3)", font: "16px SimHei", rotate: -25, horizontal: 40, vertical: 40, opacity: 0.3
}
}
}
};
}四、场景二:企业知识库的分级安全策略
4.1 业务需求
某企业知识库系统存储了大量技术文档和培训资料,需要按文档密级实施不同的安全策略:
公开文档:自由查看、复制,无水印;
内部文档:可查看、可复制到内部,不可外传,显示轻量水印;
机密文档:仅可查看,不可复制、打印、下载,显示高密度水印。
4.2 分级安全配置方案
const securityProfiles = {
public: {
permissions: { edit: false, copy: true, copyOut: true, print: true, download: true },
customization: { waterMark: null }
},
internal: {
permissions: { edit: false, copy: true, copyOut: false, print: true, download: false },
customization: {
waterMark: { value: "${userName}\\n内部资料", fillstyle: "rgba(200,200,200,0.2)", font: "14px Arial", rotate: -30, horizontal: 60, vertical: 60, opacity: 0.2 }
}
},
confidential: {
permissions: { edit: false, copy: false, copyOut: false, print: false, download: false },
customization: {
waterMark: { value: "${userName}(${userId})\\n${clientIp}\\n${timestamp}\\n机密文件", fillstyle: "rgba(255,0,0,0.15)", font: "20px SimHei", rotate: -25, horizontal: 30, vertical: 30, opacity: 0.25 }
}
}
};4.3 实际效果
公开文档:用户无感知,与普通文档查看体验一致 内部文档:可以在文档内复制内容辅助工作,但无法粘贴到微信、邮件等外部应用 机密文档:文档表面密集的红色水印明确标识了查看者身份,任何截图都会留下完整溯源信息
五、场景三:审批流程中的动态权限控制
5.1 业务需求
某合同管理系统中,合同在不同审批阶段需要不同的权限:起草阶段(起草人可编辑)、审批阶段(审批人只读查看,可添加评论)、会签阶段(会签人可编辑特定内容)、签署阶段(所有人只读,不可复制、打印)。
5.2 利用动态权限切换实现
const connector = docEditor.createConnector();
function onStartReview() {
connector.callCommand(function () {
Api.changePermissions({ edit: false, comment: true, copy: true, copyOut: false, print: false });
});
}
function onApproved() {
connector.callCommand(function () {
Api.changePermissions({ edit: false, comment: false, copy: false, copyOut: false, print: false });
});
}5.3 与业务系统联动
前端打开文档时,根据当前审批状态初始化权限 当审批状态发生变化时,后端通过 WebSocket 或消息推送通知前端 前端收到通知后,通过连接器调用 Api.changePermissions实时切换权限用户无需刷新页面,权限变更即时生效
这种方式比传统的"关闭文档-修改权限-重新打开"流程流畅得多,用户体验显著提升。
5.4 用户只读模式的安全应用
// 1. 初始化:用户只读模式,连接器可操作
const config = {
editorConfig: {
mode: "edit",
permissions: { edit: true },
customization: {
readOnly: true,
waterMark: {
value: `${user.name}\\n${user.ip}\\n机密合同`,
fillstyle: "rgba(255, 0, 0, 0.2)",
font: "16px SimHei"
}
}
},
document: {
permissions: { copy: true, copyOut: false, print: false, download: false }
}
};
function onContractApproved() {
connector.callCommand(function () {
Api.changePermissions({
edit: false, comment: false, copy: false, copyOut: false, print: false
});
});
}✅ 安全优势
• 全程可控:从文档生成到审批完成,权限逐步收紧
• 操作留痕:水印记录用户信息和操作时间,便于事后追溯
• 防截屏:高密度水印让截图传播可被追踪
• 防复制:内部剪切板阻止内容外泄
六、安全防护体系的整体架构

各层之间相互配合:
- 应用层
确定用户身份和权限等级 - 编辑器层
执行具体的功能限制 - 视觉层
提供截图威慑和事后溯源 - 传输层
防止参数篡改和中间人攻击 - 基础设施层
保证数据物理安全
七、实施建议
7.1 安全策略制定
在开始技术实施前,建议先明确以下内容:
文档密级分类标准(建议不超过4级) 各密级对应的安全措施清单 特殊角色(如管理员、法务)的权限豁免规则 安全事件的处置流程
7.2 水印内容设计
水印是安全体系中的重要一环,建议:
至少包含用户姓名和时间戳,用于基本溯源 机密文档建议加入IP地址和设备信息 水印颜色和透明度需平衡安全性和阅读体验 避免水印内容过多导致文档难以阅读(建议不超过2行)
7.3 权限配置原则
- 最小权限原则:默认给予最低权限,按需开放
- 显式配置原则:所有权限字段都应显式传递,不依赖默认值
copyOut是 copy的子权限,copy为 false 时copyOut无意义不同系统集成时,务必确认集成方是否正确传递了权限字段
7.4 测试验证清单
部署安全方案后,建议逐项验证:
- □
水印是否正确显示用户信息 - □
Ctrl+C 复制的内容能否粘贴到外部记事本 - □
右键菜单的复制/粘贴是否按预期工作 - □
打印按钮/快捷键是否被正确禁用 - □
下载功能是否被正确禁用 - □
移动端是否也生效 - □
PPT播放模式下水印是否正常显示 - □
动态权限切换后,功能限制是否即时生效 - □
用户只读模式下连接器是否能正常操作文档 - □
长轮询降级后协同编辑是否正常(网闸环境)
八、总结
- 防截图水印
是威慑和溯源的第一道防线,支持动态更新 - 内部剪切板
从根本上阻断了复制外泄路径,通过 copyOut精细控制 - 动态权限切换
让安全策略能够跟随业务流程灵活变化(9.3.0+) - 用户只读模式
实现了"用户不可编辑但系统可操作"的安全场景(9.2.1+) - 长轮询降级
确保在网闸等受限网络环境下的正常使用 多层安全能力组合使用,才能形成真正的纵深防御
文档安全不是单一技术问题,而是需要从制度、流程、技术三个层面统筹考虑的系统工程。OnlyOffice 中国版提供的是技术层面的坚实基座。
相关资源
OnlyOffice最新版本9.x镜像:https://onlyoffice.moqisoft.com/docs/install/docker 版本介绍:https://onlyoffice.moqisoft.com/docs/product/summary OnlyOffice 中国版技术交流:https://qm.qq.com/q/YzEIuNe1yy
—— 构建企业级文档安全防线 · OnlyOffice 中国版 ——
夜雨聆风