DSHBox 是本机单用户桌面外壳,不是把不可信网页隔离成沙箱的浏览器。安全设计优先保证正常使用不退步,同时限制页面到本地系统的能力范围。
- 主窗口只接受 DSHBox 内置页面、当前本机
dsh weborigin 与明确允许的开发 origin;其他导航交给系统浏览器。 - dsh 插件是可执行的第三方代码,并与 dsh Web UI 共享运行环境。安装插件前必须信任其来源;内置清单和市场收录都不构成安全背书。
- 页面增强依赖 dsh Web UI 的同源接口、DOM 和标题行为。上游升级可能造成兼容性变化,但不应扩大本地权限。
dshd://只服务主窗口、当前可信 origin,并要求每次启动随机生成的令牌;令牌只经X-DSHd-Token请求头传递,不出现在任何 URL 中(避免进入页面 resource timing 缓冲区被同源脚本枚举),CORS 预检仅精确放行当前 dsh 来源;菜单完成初始化后会从页面全局对象删除该令牌。- 路径必须是绝对路径;支持用户目录缩写和 Windows/MSYS 路径规范化。读取内容只接受普通文件、UTF-8 文本且上限为 2 MiB。
- 默认程序打开潜在可执行文件会二次确认。Windows 按危险扩展名判断;Unix 只对带执行位的普通文件确认。用编辑器打开、在文件管理器中定位、复制路径或内容不额外打断。
- 该令牌能降低普通页面脚本误用风险,但不是同源恶意插件的完整隔离边界。若不信任某插件,应卸载插件,而不是依赖右键菜单令牌防护。
settings.yaml与.credentials.yaml的写入在进程内锁住完整读改写过程,再用唯一临时文件原子替换;Unix 新文件权限为0600。- 模型导入使用带重复键拒绝和解析预算的类型化 YAML 解析,只接受单一
llm-pi-ai顶层段,并拒绝额外设置、非法环境变量名与含控制字符的凭据。 - API Key 只从环境变量或
$DSH_HOME/.credentials.yaml读取,首次引导与桌面端设置的新写入也只进入凭据文件;config.json不存储也不兼容读取 API Key。环境变量优先时设置入口只读,避免低优先级文件修改造成“保存但不生效”的错觉。凭据文件属于当前用户可读数据,不要提交、同步或发送。 - 用户设置与内部状态分别写入
config.json和state.json,两者不做跨文件兜底或隐式迁移。
- 首次配置明确展示内置插件安装选项;取消或跳过后不自动安装,也不执行每日自动升级。只有明确同意才写入授权状态。
- 手动插件变更由用户统一确认后应用;后台维护只在 RPC 明确确认会话空闲时重启服务,查询失败不会冒险中断任务。
- 手动增删插件在执行前保存原始 manifest 和未完成事务;旧事务未恢复时拒绝覆盖,失败或异常退出后只收敛该次变更。用户主动卸载内置插件的所有权标记先于事务清理落盘。
- 自动更新和强制撤回只作用于用户曾明确同意、当前仍具有“内置”身份的包;从未同意内置插件,或主动卸载后再手工安装的同名包,均视为用户所有。
- 更换预置插件时,只自动移除仍由 DSHBox 管理的旧包。旧包未能清理时不安装后继包;用户曾主动卸载或手动装回旧包时,沿用用户选择,不借换包恢复自动管理。
- 插件与 dsh 共享执行环境,能够访问当前用户可访问的数据。社区清单、npm 搜索结果与市场收录都不是安全沙箱或安全背书。
- dsh 与 Node.js 更新使用备份、事务标记和中断恢复;Node.js 归档按 SHASUMS256 校验完整性:official/auto 模式校验清单来自 Node.js 官方,mirror 模式来自镜像自身(npmmirror,完整性锚点为镜像,与官方校验分属不同信任域),official 仍为默认推荐。首次安装可以取消,已写入的未完成归档会删除。
- Windows 应用更新从精确版本 tag 读取唯一 Release asset,限制下载地址和大小,写入
.part,并在替换前校验 GitHub 提供的 SHA-256 digest。 - digest 能发现传输损坏和附件错配,但它与附件来自同一 GitHub Release 信任域,不能替代代码签名。当前发布产物未签名,Windows SmartScreen、macOS Gatekeeper 或 Linux 策略可能要求用户手动放行。
- WebView2 缺失时下载微软官方 HTTPS 引导安装器,并检查大小与 PE 文件头;当前尚未额外验证 Authenticode 发布者签名。
报告方式与披露原则见仓库根目录 SECURITY.md。不要在公开 issue 中粘贴 API Key、配置文件、日志中的凭据或私人会话内容。