Skip to content

安全基线(Web / 小程序 / 网关)

permission-staging-checklist.md 配套。改认证、上传、通知、日志时对照本页。

XSS(跨站脚本)

现状 / 约定
Vue 模板禁止 v-html;用户输入用 mustache 插值或 <pre> 文本展示(已审计,当前无 v-html
通知/备注管理端通知详情用 <pre> 纯文本,不做 HTML 渲染
静态文件链接使用 buildSafeStaticUploadUrl@taskflow/shared/security/safe-static-upload-key),拒绝 ..\0、带协议的 key
小程序跳转isSafeMiniappPageUrl 限制仅 /pages/...,拒绝 ..//javascript:

网关与 HTTP 头

  • Helmetbackend/src/apps/gateway/main.ts):X-Content-Type-OptionsX-Frame-Options 等;API 不启 CSP(避免误伤 JSON/跨域)。
  • 生产 Nginxdeploy/docker/nginx-frontend.conf):nosniffSAMEORIGINReferrer-Policy
  • CORSCORS_ORIGIN 勿在生产使用 *(见 backend/.env.example)。

认证与日志

  • JWT 仅存客户端(Web localStorage / 小程序 Storage);勿把 token 打进前端日志或 URL query。
  • HTTP 日志 body 脱敏:sanitizeLogBody(密码、access_tokenopenidcode 等 → ***)。
  • 微信 openid 登录路由须为 Sys skip(见 sys-route-permission-registry + canonicalSysRoutePath)。

上传

  • 凭证/附件 key 由服务端签发;展示链接走 buildSafeStaticUploadUrl,不拼接用户原始字符串为 href
  • 上传接口仍须在服务端校验 MIME、大小与站点权限(业务层 assertSiteScope 等)。

权限(业务安全)

  • Acc 写操作:btn_acc_*_write 与路由 registry 一致;预发可开 ACC_ROUTE_GUARD_STRICT
  • 记账:openid/JWT 即可,不附 X-Site-Id(见 miniapp-bookkeeping-user-scope.mdc)。

建议后续(未默认实施)

  • 生产 HSTS:HTTPS 终止在 Nginx 时配置 Strict-Transport-Security(见 deploy/docker/snippets/nginx-hsts.conf.snippet)。
  • Web 管理端 CSP(需评估 Vite 内联脚本与 Naive UI)。
  • 依赖漏洞扫描:发版前 pnpm run check:audit(仅 backend + frontend prod、high+;miniapp 用 pnpm run check:audit:miniapp 单独看)。经 scripts/check-audit.mjsregistry.npmjs.org

TaskFlow 内部文档 Released under the MIT License.