Appearance
安全基线(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 头
- Helmet(
backend/src/apps/gateway/main.ts):X-Content-Type-Options、X-Frame-Options等;API 不启 CSP(避免误伤 JSON/跨域)。 - 生产 Nginx(
deploy/docker/nginx-frontend.conf):nosniff、SAMEORIGIN、Referrer-Policy。 - CORS:
CORS_ORIGIN勿在生产使用*(见backend/.env.example)。
认证与日志
- JWT 仅存客户端(Web
localStorage/ 小程序 Storage);勿把 token 打进前端日志或 URL query。 - HTTP 日志 body 脱敏:
sanitizeLogBody(密码、access_token、openid、code等 →***)。 - 微信 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.mjs走 registry.npmjs.org。