Skip to content

Security: dev-zlcode/launcher-panel

Security

SECURITY.md

安全策略

这个面板的安全模型很简单,也很硬:它假设只有你本机的你能碰到那个端口。 下面说清楚这个假设意味着什么,以及越出它会发生什么。

实际形态

  • 服务只绑 127.0.0.1(开发 vite.config.mjs,生产 server/prod.mjs),没有对外网卡监听。
  • 没有任何鉴权,也没有 Origin / CORS 校验。 谁能连上那个端口,谁就能调 /api/*。
  • 这意味着:你本机浏览器里打开的任意一个网页都可以向 http://127.0.0.1:5050 发请求。 浏览器能发出请求,也能读到响应——同源策略拦的是读,不拦发(简单 POST 不带预检)。 因此这些接口是可以被第三方页面触发的:
    • POST /api/open —— 用指定或系统默认应用打开一个路径/URL
    • POST /api/copy —— 往系统剪贴板写文本
    • POST /api/pick —— 弹出 macOS 原生选择器(会阻塞一个请求位)
    • POST /api/run —— 后台启动一条已存好的命令
  • 数据全在 data/items.json 一个明文文件里,不加密、不含凭证。请不要把 token、密码之类写进条目值或备注。

已经有的两道闸门

不是"防黑客",是防误用和防注入:

  1. POST /api/run 只接受 id,命令文本从服务端存储里取。请求体里传不进来任何命令内容,所以外部页面顶多触发一条你自己写过的命令,不能凭空注入一条。
  2. POST /api/terminal 只接受已经在 settings.terminals 清单里的 .app 路径,清单外的应用一律拒绝。同理,所有路径类字段要求绝对路径,读盘条目的 id/kind/tags 入库前都清洗。

命令本身以 $SHELL -i -c 在 ~ 下执行——这是设计如此(要拿到你的 alias 和 PATH), 也就是说:面板里那条命令的权限就等于你的登录 shell 的权限。 别放提权的、别放来源不明的片段。

别做这些

  • 不要把端口反向代理出去(nginx / frp / cloudflared / SSH -R 都算),也不要挂公网。 这个服务没有为多用户或不可信网络设计过,一旦可被远端访问,等价于把"以你的身份执行命令"开放给对方。
  • 不要在公共 / 办公 Wi-Fi 上开着面板再浏览别的网站。
  • 不要手改 data/items.json(会被内存里的整表覆盖,还可能漏字段让构建后的界面白屏)。

报告安全问题

这个项目只有一个维护者,没有安全团队,也不设私密邮箱。请这样做:

  1. 开一个 issue,标题写「安全问题」,正文里不要写细节——只说存在哪一类风险、影响哪个接口,让我知道该往哪看。
  2. 我会把它转成 GitHub 的私密 security advisory,再在里面对话。
  3. 细节(POC、请求体、截图)留到私密渠道里再给。

不要直接提一个"修漏洞"的公开 PR 把细节写在 diff 里——那样在你我都还没准备好的时候,漏洞就已经写在公开历史里了。

修复节奏没有承诺。我会尽快,但这是一个个人项目;如果几周没动静,可以在原 issue 下礼貌地问一次。

There aren't any published security advisories