# drawio **Repository Path**: kithub_1/drawio ## Basic Information - **Project Name**: drawio - **Description**: 绘图工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-08 - **Last Updated**: 2026-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # draw.io ## 关于 draw.io 是一个可配置的图表绘制和白板应用程序,由 draw.io Ltd(前身为 JGraph)和 draw.io AG 共同拥有和开发。我们的生产环境部署在 [https://app.diagrams.net](https://app.diagrams.net)。 ## 许可证 本仓库中的源代码基于 [Apache License 2.0](LICENSE) 许可。 图标集、模板库和图表模板的使用条款如下: > 本软件中包含的图标集和模板库及其任何衍生物(包括转换为其他格式、临摹复制、实质性相似的视觉表示,或以这些图标为参考或训练输入生成的 AI 图像),未经明确书面许可,不得作为软件资产用于 Atlassian 产品或通过 Atlassian 市场或插件生态系统分发的产品中,也不得随此类产品一同分发。 > > 此限制不适用于使用本软件创建的最终用户图表输出(如导出的图像或文档)。 部分图标最初由第三方版权持有者定义;我们已核实所有原始许可证均允许在本项目中使用。还包含了其他第三方 JavaScript 库,所有许可证均与 Apache 2.0 兼容(不含 GPL 或 AGPL)。 对于您使用本软件创建的图表,我们不主张任何版权。 ## 贡献 我们不接受 Pull Request。本项目完全由核心团队开发。 ## 适用范围 draw.io 是一个图表绘制和白板应用程序,而非 SVG 编辑器。SVG 导出功能用于嵌入网页,而非供其他工具编辑。 请注意,当前版本的 draw.io 不支持实时协作编辑。 有关任何 draw.io 产品中编辑器的问题或疑问,可以提交到本仓库的 Issue 跟踪器和 Discussions 板块。 ## 运行 运行 draw.io 的几种方式: - Fork 本仓库并[发布到 GitHub Pages](https://help.github.com/categories/github-pages-basics/),即可获得一个[功能齐全的编辑器](https://jgraph.github.io/drawio/src/main/webapp/index.html)(不含集成功能) - 使用[官方 Docker 镜像](https://github.com/jgraph/docker-drawio) - 下载 [draw.io 桌面版](https://get.diagrams.net) 打包好的 .war 文件可在 [Releases 页面](https://github.com/jgraph/draw.io/releases)获取。 ## 支持的浏览器 Chrome 123+、Firefox 120+、Safari 17.5+、Opera 109+、Edge 123+、WebView Android 137+、Safari iOS 18.5+。 ## 商标 draw.io 是欧盟注册商标 (#018062448)。 请勿以暗示与 draw.io 有关联、受其认可或赞助的方式使用 draw.io 名称或标识。请勿将 draw.io 标识用于您自己的业务、产品、项目、域名或社交媒体形象。请勿修改 draw.io 标识。使用 draw.io 商标需事先获得书面许可。 --- ## 项目架构 ### 技术栈 - **后端**:Java Servlet(基于 Jakarta Servlet API) - **前端**:纯 JavaScript + HTML5 Canvas(位于 `src/main/webapp/`) - **构建系统**:Ant(`etc/build/build.xml`) - **部署方式**:WAR 包 / Docker / GitHub Pages ### 目录结构 ``` drawio/ ├── src/ │ ├── main/ │ │ ├── server/java/com/mxgraph/online/ ← 后端 Java Servlet 源码 │ │ └── webapp/ ← 前端 Web 应用 │ │ ├── index.html ← 编辑器主入口 │ │ ├── connect/ ← 第三方平台集成(Google Drive 等) │ │ ├── js/ ← 核心 JavaScript 库 │ │ └── images/ ← 静态图片资源 ├── docs/ │ ├── claude/ ← Claude 开发辅助文档 │ │ ├── animations.md │ │ ├── collab-checksum.md ← 协作校验和调试指南 │ │ ├── export-dialogs.md │ │ ├── layouts.md │ │ ├── libavoid-routing.md │ │ ├── mermaid.md │ │ └── native-bundles.md │ ├── code-review.md ← 代码审查指南 │ └── dialog-style-guide.md ├── etc/ │ ├── build/ ← Ant 构建脚本 │ ├── dependencies/ ← 依赖管理 │ ├── docker/ ← Docker 配置 │ ├── i18n/ ← 国际化翻译工具 │ ├── imageResize/ ← 图片缩放工具 │ └── integrate/ ← 集成工具 └── VERSION ← 当前版本号 ``` ### 后端核心类说明 | 类名 | 功能 | |------|------| | `AbsAuth.java` | OAuth 认证基类,定义通用认证流程 | | `GoogleAuth.java` | Google OAuth 2.0 认证实现 | | `GitHubAuth.java` | GitHub OAuth 认证实现 | | `GitlabAuth.java` | GitLab OAuth 认证实现 | | `DropboxAuth.java` | Dropbox OAuth 认证实现 | | `MSGraphAuth.java` | Microsoft Graph (OneDrive) OAuth 认证实现 | | `AtlasAuth.java` | Atlassian OAuth 认证实现 | | `AbsCache.java` | 协作编辑缓存与补丁同步 | | `AbsComm.java` | HTTP 请求/响应抽象接口 | | `ProxyServlet.java` | 代理请求处理(图片、资源加载) | | `ExportProxyServlet.java` | 导出服务代理 | | `ConverterServlet.java` | 文件格式转换(EMF 等) | | `EmbedServlet2.java` | 嵌入式图表生成 | | `Utils.java` | 通用工具类(编码、压缩、SSRF 防护、流拷贝) | | `Constants.java` | 全局常量定义 | | `mxBase64.java` | Base64 编解码 | | `LogServlet.java` | 日志收集 Servlet | ### 第三方平台集成 draw.io 支持与以下云存储平台集成,实现文件的打开、编辑和保存: | 平台 | 前端入口 | 后端 Servlet | |------|----------|-------------| | Google Drive | `connect/google/` | `GoogleAuthServlet` | | GitHub | `github.html` | `GitHubAuthServlet` | | GitLab | `gitlab.html` | `GitlabAuthServlet` | | Dropbox | `dropbox.html` | `DropboxAuthServlet` | | OneDrive | `connect/office365/` | `MSGraphAuthServlet` | ### 安全特性 - **SSRF 防护**(`Utils.validatedAddress`):对所有代理请求的目标地址进行校验,阻止内网地址、回环地址、链路本地地址等 - **DNS 重绑定攻击防护**(`Utils.openPinnedConnection`):使用 DNS 一次解析 + IP 绑定连接的方式防止 TOCTOU 攻击 - **CSRF 防护**(`AbsAuth`):OAuth 流程使用 state token 验证,防止跨站请求伪造 - **路径遍历防护**(`ExportProxyServlet.containsTraversal`):防御纵深策略,阻止目录遍历攻击 - **文件内容类型校验**(`Utils.checkStreamContent`):通过魔数(magic bytes)验证文件类型,防止上传恶意文件 - **请求大小限制**(`Constants.MAX_REQUEST_SIZE`):默认 50MB,可配置 ### 环境变量配置 | 变量名 | 说明 | 默认值 | |--------|------|--------| | `DRAWIO_USE_HTTP` | 使用 HTTP(不安全,风险自负) | 不启用 | | `ENABLE_DRAWIO_PROXY` | 启用代理 Servlet | 不启用 | | `DRAWIO_PROXY_ALLOWED_PORTS` | 代理允许的目标端口(逗号分隔) | 80, 443 | | `EXPORT_URL` | 导出服务后端 URL | 无 | | `ALLOW_INTERNAL_10_NET` | 允许代理访问 10.x.x.x 内网 | 不启用 |