# 安全策略

## 支持范围

只维护最新发布版（npm 上的 `latest` 与仓库 `main`）。旧版本的问题请先升级再复现。

## 这个插件会碰什么

理解攻击面只需要看三件事：

1. **文件系统**：只读写 `$DSH_HOME/custom-css/`（默认 `~/.dsh/custom-css/`）下的 `.css` 文件，外加同目录的 `active.json`。
   - 文件名必须是**单个路径段且以 `.css` 结尾**（`^[A-Za-z0-9._\u4e00-\u9fa5-]+\.css$`，≤64 字符），`..` 与分隔符一律拒绝；拼出的绝对路径还会二次校验是否仍在目录内。
   - 出目录的两条路径：`POST /open` 会用系统默认程序打开**目录内已存在**的某个 `.css`（这是「用真正的编辑器改」的实现方式）；其余接口都不执行外部程序。
2. **HTTP**：host 半在 `/dsh-custom-css` 前缀下挂一组 JSON 接口，**必须**通过 Connection 服务的请求围栏（未认证 / 非信任来源 401/403；拿不到围栏时 503 fail-closed）。
3. **页面**：浏览器半只会把样式表文本写进一个 `<style>` 标签（`textContent`，不是 `innerHTML`），并渲染设置行。样式表内容不会变成标记。

## 已知的设计前提

- 自定义 CSS 是**你自己写的样式**，它会作用于你自己的界面。信任边界与「在 DevTools 里写样式」一致：把样式表交给别人，就等于把页面外观交给别人。
- 样式表保存在宿主目录，**会被界面上的任何已认证浏览器会话读写**。不要把不该共享的 GUI 暴露给不可信来源（DSH 自身的 trusted-host 与配对机制是第一道防线）。
- 插件不联网、不上报、不收集遥测。

## 报告问题

请用 GitHub 的私密渠道：仓库 **Security → Report a vulnerability**（Security Advisories）。若无法使用，再开普通 Issue 但**不要**贴可利用的细节。

请在报告里带上：DSH 版本、插件版本、复现步骤、以及最小复现的样式表或接口调用。我通常会先确认是否可复现，再决定修复与披露节奏。
