本文档描述了 drawio-desktop 应用程序的安全模型。该安全模型旨在将应用程序与互联网隔离,并防止任何未经授权的数据传输,从而确保您的图表数据保持私密和安全。此页面重点介绍 Electron 封装应用程序中实现的安全功能,而不是 draw.io 核心绘图引擎的安全性。
drawio-desktop 的主要安全原则是完全隔离互联网,唯一的例外是更新机制,它遵循严格的安全协议。
drawio-desktop 的安全架构建立在多层保护之上
来源: src/main/electron.js358-389 README.md10-17
drawio-desktop 应用程序旨在完全隔离互联网,唯一的例外是更新机制。
这种隔离带来了一些功能上的影响
用户可以使用 --disable-update 命令行选项、DRAWIO_DISABLE_UPDATE=true 环境变量,或者通过在代码库中设置 disableUpdate 标志来完全禁用更新。
来源: README.md10-17 src/main/electron.js19-25 sync.cjs15-16
强制执行严格的内容安全策略 (CSP),以防止包括跨站脚本 (XSS) 攻击在内的各种安全漏洞。
CSP 通过拦截所有 HTTP 响应并添加适当的标头来应用。
| CSP 指令 | 值 | 目的 |
|---|---|---|
| default-src | 'self' | 将资源限制为同一来源 |
| script-src | 'self' + hashes | 仅允许来自同一来源的脚本或具有特定哈希值的脚本 |
| connect-src | 'self' | 仅允许连接到同一来源 |
| frame-src | 'none' | 防止在 iframe 中嵌入 |
| base-uri | 'none' | 防止更改基本 URL |
| object-src | 'none' | 防止使用 object 标签 |
Google Fonts 访问仅在用户明确允许的情况下才启用。
来源: src/main/electron.js358-371 src/main/electron.js80-82 src/main/electron.js959-967
应用程序严格控制文件访问,以防止未经授权的文件操作。
文件访问仅限于
codeUrl)pluginsCodeUrl),如果启用了插件。任何试图访问这些目录之外的文件的尝试都会被阻止,从而防止了访问用户系统上的敏感文件等潜在安全风险。
来源: src/main/electron.js372-389 src/main/electron.js349-352
该应用程序使用 Electron 的上下文隔离功能,在进程之间创建安全的边界。
与进程隔离相关的关键安全功能
上下文隔离:确保渲染器进程(运行 Web 内容)与主进程(有权访问系统资源)分离。
上下文桥:通过预加载脚本仅向渲染器进程公开特定的、受控的 API。
发送者验证:所有 IPC 消息都经过验证,以确保它们来自合法来源。
validateSender 函数检查 IPC 消息是否仅来自应用程序自己的代码。
来源: src/main/electron.js166-176 src/main/electron-preload.js36-71 src/main/electron.js125-128
为维护应用程序安全,对导航和窗口创建进行了严格控制。
应用程序实施了多项限制:
导航阻止:阻止所有导航尝试,确保应用程序保持隔离。
窗口创建限制:只能创建特定类型的窗口。
about:blank),具有安全选项。openExternal 检查的外部 URL。WebView 禁用:阻止所有 webview 附件尝试,防止潜在的安全绕过。
这些限制协同工作,以维护应用程序的安全边界。
来源: src/main/electron.js1224-1255
更新机制是唯一允许连接到互联网的组件。
更新机制包含多项安全功能:
受信任的来源:更新仅从 GitHub releases 和 GitHub 拥有的 AWS S3 存储桶下载。
用户控制:用户可以选择是否下载和安装更新(除非启用了静默更新)。
禁用选项:可以通过命令行标志、环境变量或配置文件完全禁用更新。
这种受控的更新流程可确保应用程序保持最新,同时维护安全性。
来源: src/main/electron.js1129-1138 README.md10-17 src/main/electron.js1258-1353
在整个代码库中,各种验证机制确保操作的安全执行。
IPC 发送者验证:所有 IPC 消息都经过验证,以确保它们来自应用程序自己的代码。
文件 URL 验证:文件 URL 经过验证,以确保它们指向允许的位置。
窗口位置验证:窗口位置经过验证,以确保它们在显示范围内。
validateSender 函数在所有 IPC 通信中被调用,以防止未经授权的代码触发主进程中的操作。
这种验证出现在整个代码库中,例如:
来源: src/main/electron.js125-128 src/main/electron.js232-237
drawio-desktop 的安全模型遵循几项关键设计原则:
默认隔离:应用程序默认与互联网隔离。
最小权限原则:只启用最低限度的必要功能。
纵深防御:多层安全保护应用程序。
用户控制:用户可以根据自己的需求配置安全功能。
透明度:安全措施已文档化并在源代码中可见。
正如 README 中所述:“安全和隔离应用程序是 draw.io desktop 的主要目标。如果您要求任何默认情况下在应用程序中启用了外部连接的功能,答案将是否定的。”
来源: README.md10-17
drawio-desktop 的安全模型通过多层安全控制为用户图表数据提供强大的保护。通过保持与互联网的严格隔离、实施内容安全策略、限制文件访问以及强制执行进程隔离,该应用程序确保图表数据保持私密和安全。
唯一的外部通信通过受控的更新机制进行,如果需要,可以完全禁用。这种安全优先的方法可能会限制一些需要互联网连接的功能,但将数据隐私和安全置于首位。