Modly 本地服务安全指南:8765 端口只监听 localhost 的风险与缓解
【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly
Modly是一款完全运行在你本地 GPU 上的 3D 模型生成桌面应用,可以上传图片或输入提示词生成 3D 模型。它的核心是一个由 Electron 自动拉起的 FastAPI 本地服务,默认绑定127.0.0.1:8765,仅接受来自本机的请求。绑定 localhost 是安全的基础,但"只监听本机"并不等于"绝对安全"——本文帮你理解 8765 端口开放了哪些能力、本地访问存在哪些隐患,以及如何快速自查和缓解。
一、Modly 的本地服务是怎么工作的
Modly 的架构很简单:Electron 前端 + Python 后端。启动应用时,python-bridge.ts 会以固定参数拉起 uvicorn:
python -m uvicorn main:app --host 127.0.0.1 --port 8765也就是说,端口号 8765 和监听地址 127.0.0.1 都写死在代码里,普通用户不需要配置。前端页面通过 src/index.html 中的 Content-Security-Policy 也只允许连接http://127.0.0.1:8765。这套"本机回环 + 白名单"的设计,是本地 AI 应用防止服务被外部访问的第一道闸门。
应用运行期间,8765 端口还提供给两类"合法邻居"使用:
- MCP 服务器:api/mcp_server.py 依赖
http://localhost:8765让外部 AI 代理驱动 Modly; - 命令行助手:tools/modly-cli/agent.py 默认同样指向
127.0.0.1:8765(可通过MODLY_API_URL环境变量覆盖)。
二、8765 端口上开放了哪些能力
风险大小取决于端口背后"能做什么"。查阅 api/main.py 注册的路由后,8765 端口的主要能力如下:
| 能力 | 路径 | 说明 |
|---|---|---|
| 健康检查 | GET /health | Electron 用来探测服务就绪 |
| 图像生成 3D | POST /generate/from-image | 上传一张图即可启动生成任务,独占 GPU 显存 |
| 模型管理 | /model/* | 下载(可暂停/取消)、切换、卸载模型 |
| 网格优化 | /optimize/* | 减面、平滑等处理 |
| 文件导出 | GET /export/{glb,stl,obj,ply} | 把工作区里的模型文件转格式返回 |
| 工作区文件 | GET /workspace/{path} | 直接按路径返回工作区内的文件 |
| 配置写入 | POST /settings/paths、/settings/hf-token | 可修改模型/工作区目录、写入 HuggingFace Token |
| Agent 对话 | POST /agent/chat | 驱动 Ollama 执行减面、跑工作流等工具调用 |
注意两点:整个服务没有任何鉴权(无 Token、无账号),且 api/main.py 中的 CORS 配置是allow_origins=["*"]——这是为了跨源读取Content-Length等需求做的宽松设置,意味着同一台机器上的任意网页都可以向 8765 发请求。
三、风险在哪:两种场景分开看
场景 1:端口保持只监听 localhost(默认,推荐)
风险来自"本机上的其他程序",而不是外网:
- ⚠️本机任意进程可调用:没有鉴权,恶意软件或失控脚本都能生成任务、消耗你的 GPU;
- ⚠️浏览器是最大攻击面:由于 CORS 全开,如果 Modly 运行期间你浏览了带恶意脚本的网页,脚本可以直接调用
/generate/from-image或读取/workspace/下的文件内容; - ⚠️文件读取范围偏宽:api/routers/export.py 有路径穿越校验,但
GET /workspace/{full_path:path}路由未做同样的限制,建议结合"只开在 localhost"来评估; - ⚠️启动即清场:python-bridge.ts 启动时会强制杀掉占用 8765 端口的其他进程。如果你的其他工具恰好用这个端口,Modly 启动就会把它干掉。
场景 2:端口被改到 0.0.0.0 或映射到局域网(高危)
如果通过手动启动 uvicorn、端口转发等方式让 8765 对局域网可见,上面所有风险都会升级:
- 局域网内任何人都能免费占用你的 GPU 显存批量跑生成任务;
- 可读取你工作区里的全部 3D 资产文件(
/workspace/、/export/); - 可调用
POST /settings/hf-token写入恶意 Token,影响后续所有模型下载。
四、快速自查:我的 8765 端口安全吗
打开终端,一条命令确认监听地址(Linux/macOS 用lsof,Windows 用netstat):
lsof -i :8765 # Linux / macOS netstat -ano | findstr :8765 # Windows判断标准:本地地址(Local Address)应该是127.0.0.1:8765。只要看到0.0.0.0:8765或你的局域网 IP(如192.168.x.x:8765),就说明端口对网卡开放了,需要立刻排查是谁改的。
五、缓解措施清单
按优先级从高到低:
- 保持默认绑定:使用官方桌面应用即可,Electron 已把
--host 127.0.0.1写死;手动运行后端时参考 api/README.md,务必保留--host 127.0.0.1; - 不做端口转发:不要为 8765 配置 NAT/路由器转发;确需跨设备访问,优先用 Tailscale 之类的组网工具并叠加一层带鉴权的反向代理;
- 运行时管住浏览器:Modly 运行期间尽量不浏览不可信网页,减少"恶意脚本直接调本机 API"的暴露面;
- 用完即关:退出应用后 Python 进程组会被整体回收(见 python-bridge.ts),端口随之释放,这是最彻底的缓解;
- 关注版本更新:
/workspace/文件读取等边界逻辑后续可能加入更严格的路径校验,保持应用更新即是安全更新; - 共享 GPU 的机器要留意:多人共用一台机器时,任何登录用户都可访问 8765,建议为每位使用者单独开系统账号并限制访问模型目录。
总结
Modly 用"127.0.0.1回环绑定 + 前端 CSP 白名单"给 8765 端口筑起了第一道安全墙,对单机个人使用来说是稳妥的默认设计。真正的风险来自三件事:服务无鉴权、CORS 全开、部分文件接口路径校验宽松——只要端口不离开 localhost,这些风险基本被限制在本机范围内;一旦端口暴露到局域网,GPU 被蹭、文件被读、配置被改都会成为现实威胁。记住一句话:让 8765 只属于 127.0.0.1,其余交给系统防火墙和版本更新。
【免费下载链接】modlyDesktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU项目地址: https://gitcode.com/GitHub_Trending/mo/modly
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考