create-dwy 0.14.2 → 0.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/package.json +1 -1
  3. package/templates/ai-tools/rules/Global/dwy-docker.md +71 -0
  4. package/templates/ai-tools/rules/iOS/dwy-swift-core.md +75 -0
  5. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit.md +153 -0
  6. package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-postgres.md +6 -0
  7. package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-redis.md +14 -2
  8. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/SKILL.md +47 -7
  9. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-data.md +11 -0
  10. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-network.md +14 -0
  11. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/references/checks-runtime.md +16 -0
  12. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/references/security-doc-search.md +179 -0
  13. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_db.sh +27 -2
  14. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_docker.sh +10 -0
  15. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_nginx.sh +8 -0
  16. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/SKILL.md +1 -1
  17. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/SKILL.md +3 -3
  18. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/templates/impl-plan.md +2 -2
  19. package/templates/ai-tools/rules/iOS/dwy-swift-style.md +0 -96
  20. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit-safe.md +0 -66
  21. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit/SKILL.md +0 -125
  22. package/templates/ai-tools/skills//350/204/232/346/211/213/346/236/266/dwy-tech-stack/SKILL.md +0 -61
  23. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_base.sh" +0 -0
  24. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_capacity.sh" +0 -0
  25. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_env.sh" +0 -0
  26. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_https.sh" +0 -0
  27. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_logs.sh" +0 -0
  28. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_resilience.sh" +0 -0
  29. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_secrets.sh" +0 -0
  30. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_services.sh" +0 -0
  31. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/check_ssh.sh" +0 -0
  32. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/256/211/345/205/250}/dwy-deploy-audit/scripts/run_all.sh" +0 -0
  33. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-publish/SKILL.md" +0 -0
  34. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-publish/references/application-release.md" +0 -0
  35. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-publish/references/sdk-release.md" +0 -0
  36. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/SKILL.md" +0 -0
  37. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/references/semver-spec.md" +0 -0
  38. /package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203 → 345/274/200/345/217/221/346/265/201/347/250/213}/dwy-semver/scripts/bump.py" +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # create-dwy
2
2
 
3
+ ## 0.14.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 将 iOS 规则 `dwy-swift-style.md` 重命名为 `dwy-swift-core.md`,并重构为精简版规范。
8
+ - 新增规则级配置收口约束,要求可配置项统一在 `AppConfig` 管理。
9
+ - 加强国际化规则:默认要求中文/英文支持,统一 `localizationBundle + loc() + LocalizationManager + AppLanguage` 实施要点。
10
+
11
+ ## 0.14.3
12
+
13
+ ### Patch Changes
14
+
15
+ - 完善 Git 提交相关规范与模板文档,统一提交规则与 AI 署名治理说明。
16
+ - 优化 iOS 规则中图标策略,优先 SF Symbols,缺省使用成熟第三方 SVG 方案。
17
+ - 强化 `dwy-tdd-dev` 与 `dwy-0to1` 流程文档内的提交规范引用方式。
18
+
3
19
  ## 0.14.2
4
20
 
5
21
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-dwy",
3
- "version": "0.14.2",
3
+ "version": "0.14.4",
4
4
  "description": "项目脚手架与多平台 AI 配置同步工具",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,71 @@
1
+ ---
2
+ description: Docker 通用规则(镜像固定版本、容器内存上限、日志大小限制)
3
+ ---
4
+
5
+ # Docker 通用规则
6
+
7
+ 适用于 `Dockerfile`、`docker-compose*.yml`、`compose.yml`、Kubernetes manifest、CI 配置中的所有 `FROM` / `image:` 字段,以及容器资源与日志配置。
8
+
9
+ ## 一、Docker 镜像固定版本
10
+
11
+ - **必须**使用固定版本 tag
12
+ - **禁止** `latest`
13
+ - **禁止**省略 tag。省略 tag 等同于 `latest`
14
+ - **禁止**浮动 tag:`stable`、`mainline`、`current`、`release`、`lts`、`rolling`、`main`、`master`、`head`、`edge`、`nightly`
15
+ - **禁止**只写环境或发行版 tag:`alpine`、`slim`、`bookworm`、`bullseye`、`buster`、`jammy`、`focal`、`noble`、`trixie`
16
+ - 数据库、缓存、网关、消息队列等关键基础设施,优先固定到 `tag@sha256:...`
17
+
18
+ ### 正反例
19
+
20
+ ```dockerfile
21
+ # 反例
22
+ FROM nginx:latest
23
+ FROM python
24
+ image: redis:7
25
+ image: postgres:bookworm
26
+
27
+ # 正例
28
+ FROM nginx:1.26.2
29
+ FROM python:3.12.10-slim
30
+ image: redis:7.4.2
31
+ image: postgres:16.4
32
+ image: postgres:16.4@sha256:xxxxx
33
+ ```
34
+
35
+ ## 二、Docker 容器配置要求
36
+
37
+ ### 1. 内存设置
38
+
39
+ - 每一个容器**必须**设置最大可用内存
40
+ - 与 Redis 配合使用时,容器最大可用内存**必须大于** Redis 的 `maxmemory`
41
+ - **禁止**容器无限制使用宿主机内存
42
+
43
+ ### 2. 日志设置
44
+
45
+ - Docker 日志**必须**设置最大使用量
46
+ - **必须**限制单个日志文件大小与轮转文件数量
47
+ - **禁止**不设上限长期写入,避免占满磁盘
48
+
49
+ ### compose 示例
50
+
51
+ ```yaml
52
+ services:
53
+ app:
54
+ image: myapp:1.2.3
55
+ mem_limit: 512m
56
+ logging:
57
+ driver: json-file
58
+ options:
59
+ max-size: "10m"
60
+ max-file: "3"
61
+
62
+ redis:
63
+ image: redis:7.4.2
64
+ command: ["redis-server", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"]
65
+ mem_limit: 384m
66
+ logging:
67
+ driver: json-file
68
+ options:
69
+ max-size: "10m"
70
+ max-file: "3"
71
+ ```
@@ -0,0 +1,75 @@
1
+ ---
2
+ description: iOS 17+ SwiftUI 开发基线规则(全局适配、动画、国际化、注释)
3
+ paths:
4
+ - "**/*.swift"
5
+ ---
6
+
7
+ ## iOS 目标与写法
8
+
9
+ - iOS 最低版本 17.0+,不为 16 及以下做兼容分支。
10
+ - 统一 Observation + `@MainActor`,状态对象默认 `final class`。
11
+
12
+ ```swift
13
+ @MainActor
14
+ @Observable
15
+ final class TaskListViewModel {}
16
+ ```
17
+
18
+ ## 风格
19
+
20
+ - 4 空格缩进,不用 Tab。
21
+ - `UpperCamelCase` / `lowerCamelCase`。
22
+ - 参数过长换行,类型签名参数与返回值各占一行。
23
+ - 一行只做一件事,避免压缩表达式。
24
+
25
+ ## 配置管理
26
+
27
+ - 可修改的运行时配置统一放在 `AppConfig`,避免业务层散落魔法值和可调参数。
28
+ - 默认实现必须只有一个 `AppConfig` 入口,所有配置项、开关、阈值和默认值从这里读取。
29
+ - 配置读取禁止越界分散;新参数先加到 `AppConfig`,再注入到业务逻辑。
30
+ - `AppConfig` 负责默认值、持久化键名、配置来源边界,业务层只读使用。
31
+
32
+ ## 注释与控制流
33
+
34
+ - 关键类型、方法、属性必有中文 `///` 注释,写明意图和边界。
35
+ - 系统外边界校验,内部调用信任类型,不加冗余兜底。
36
+ - 统一 `guard` + early return,不要多层 `else`。
37
+ - 禁止 `try?` 吞异常;不写无意义 `value ?? default`。
38
+
39
+ ## 全面屏与布局
40
+
41
+ - 默认尊重安全区;固定内容区用 `safeAreaInset` / `safeAreaPadding`。
42
+ - 全屏背景、遮罩、弹层可用 `ignoresSafeArea()`。
43
+ - 禁止使用固定状态栏高度常量。
44
+
45
+ ## 动效
46
+
47
+ - 默认优先 `spring`,用同一组参数避免风格撕裂。
48
+
49
+ ```swift
50
+ private let motionSpring = Animation.spring(response: 0.5, dampingFraction: 0.75)
51
+ ```
52
+
53
+ ## 图标与文案
54
+
55
+ - 图标优先 `Image(systemName:)`,无符号则用成熟 SVG。
56
+ - 文案禁止 emoji,禁止硬编码,统一 `loc("key")`。
57
+ - 禁止使用 emoji 作为功能说明、状态、提示。
58
+
59
+ ```swift
60
+ Image(systemName: "chevron.right")
61
+ Text(loc("home_title"))
62
+ ```
63
+
64
+ ## 国际化
65
+
66
+ - 项目必须实现国际化。
67
+ - 默认实现必须包含中文和英文。
68
+ - 使用 `localizationBundle + loc()` + `LocalizationManager` + `AppLanguage` 组合。
69
+ - `loc` 必须走 bundle,不依赖默认 locale 自动解析 key。
70
+ - 语言变更持久化并刷新 `localizationBundle`,`system` 走系统首选。
71
+
72
+ ## 资源与时序
73
+
74
+ - 颜色、字号走 token,不用裸值。
75
+ - 时间来源通过注入参数或测试可控入口,不直接散落 `Date()`。
@@ -0,0 +1,153 @@
1
+ ---
2
+ description: Git Commit 规范(提交安全、敏感扫描、Scope、消息规范、AI 署名治理)
3
+ ---
4
+
5
+ # Git Commit 规范(强制)
6
+
7
+ ## 1. 适用范围
8
+
9
+ 适用于所有 Git 提交流程,覆盖:
10
+
11
+ - `git add`
12
+ - `git commit`
13
+ - 为提交生成或校验 commit message 的场景
14
+
15
+ 任一步骤不通过:中止当前提交流交付流程。
16
+
17
+ ## 2. 执行顺序(硬约束)
18
+
19
+ 1. 安全写法检查
20
+ 2. Stage 级敏感扫描
21
+ 3. 变更范围确认
22
+ 4. Scope 与 message 格式校验
23
+ 5. AI 署名与生成声明校验
24
+
25
+ ## 3. 安全写法(命令注入防护)
26
+
27
+ `git commit -m "..."` 会对双引号内内容做 shell 展开。出现反引号或 `$(...)` 时,禁止直接使用双引号形式。
28
+
29
+ ### 3.1 推荐:消息文件提交(优先)
30
+
31
+ ```bash
32
+ git commit -F /tmp/commit-msg.txt
33
+ ```
34
+
35
+ ```bash
36
+ cat > /tmp/commit-msg.txt <<'EOF'
37
+ feat: 示例提交说明
38
+
39
+ - 修改点 A
40
+ - 修改点 B
41
+ EOF
42
+ git commit -F /tmp/commit-msg.txt
43
+ ```
44
+
45
+ ### 3.2 允许:单引号提交
46
+
47
+ ```bash
48
+ git commit -m 'feat: 支持 runConcurrent'
49
+ ```
50
+
51
+ 前提:message 内无单引号字符。
52
+
53
+ ### 3.3 禁止:双引号直接携带反引号
54
+
55
+ ```bash
56
+ git commit -m "feat: run `build-tool`"
57
+ ```
58
+
59
+ 上例存在命令替换风险。
60
+
61
+ ### 3.4 兜底:转义(不推荐)
62
+
63
+ ```bash
64
+ git commit -m "feat: run \`build-tool\`"
65
+ ```
66
+
67
+ ## 4. Stage 级敏感扫描(强制)
68
+
69
+ 同时扫描:
70
+ - `git diff --cached`
71
+ - `git diff --cached --name-only`
72
+
73
+ ### 4.1 禁止提交文件
74
+
75
+ `.env*`、`*.pem`、`*.key`、`*.p12`、`*.pfx`、`*.jks`、`*.keystore`、`*.sql`(真实数据)、`*.dump`、`*.sqlite`、`*.xlsx`、`*.csv`(敏感表)、`*.log`、`pgdata/`、`cache/*.json`。
76
+
77
+ ### 4.2 禁止内容片段(示例)
78
+
79
+ `sk-` 开头 API Key、`AKIA` 开头 AWS Key、`ghp_` GitHub Token、`password=...`、`token=...`、`secret=...`、明文数据库连接串、私钥头、`IP:端口`、`ssh user@ip`。
80
+
81
+ ### 4.3 例外
82
+
83
+ `.env.example`、环境变量读取方式、`localhost`/`127.0.0.1` 示例连接串可保留。
84
+
85
+ ### 4.4 处理失败
86
+
87
+ 1. 立即停止。
88
+ 2. 输出 `文件名:行号:命中片段`。
89
+ 3. 给出修复建议(`.gitignore`、改环境变量、替换占位符)。
90
+ 4. 用户确认后继续;用户强制提交时,message body 追加:
91
+ - `GIT-SECURITY: 用户已确认提交此内容`
92
+
93
+ ## 5. 变更范围与提交拆分
94
+
95
+ 先执行 `git diff --cached`,明确:修改了哪些模块、影响边界、是否一次可归因。
96
+
97
+ 若单条 message 无法在 `subject` 中清晰表达,必须拆分 commit。
98
+
99
+ ## 6. Commit Scope
100
+
101
+ Scope 由 AI 根据变更模块与项目语义自行决定,保持与现有提交习惯一致且可读。
102
+
103
+ - 单模块改动:优先加 scope,名称贴近主改动模块(如 `eui` / `backend` / `cli` 等)。
104
+ - 跨模块改动:可不带 scope。
105
+ - 无法稳定归类:短期使用无 scope,避免强行造新约束。
106
+
107
+ ## 7. Commit Message 规则
108
+
109
+ 格式:
110
+
111
+ `<type>(<scope>): <subject>`
112
+
113
+ 或
114
+
115
+ `<type>: <subject>`
116
+
117
+ 或
118
+
119
+ `<type>!: <subject>`
120
+
121
+ 或
122
+
123
+ `<type>(<scope>)!: <subject>`
124
+
125
+ `type` 限定为:`feat`、`fix`、`refactor`、`chore`、`docs`、`test`、`perf`、`style`、`ci`。
126
+
127
+ `subject` 规则:
128
+
129
+ - 中文、动宾短语。
130
+ - ≤72 字符。
131
+ - 不用句号、不用“了”。
132
+ - 不得含 emoji。
133
+ - 可选 body 仅说明 why,不要复述 what。
134
+ - 破坏性变更:`feat!:` / `fix!:`(带 scope 时写成 `feat(<scope>)!:` / `fix(<scope>)!:`) + `BREAKING CHANGE: ...`
135
+
136
+ ## 8. AI 署名与生成声明治理
137
+
138
+ commit 的 subject、body、footer、trailer 中禁止出现:
139
+
140
+ - `Co-Authored-By: Claude ...`
141
+ - `Generated with Claude Code`
142
+ - `Generated with ...`
143
+ - `Claude`、`ChatGPT`、`GPT`、`Copilot`、`Cursor`、`AI`、`LLM`
144
+ - `noreply@anthropic.com`、`noreply@openai.com`
145
+
146
+ `git commit -m "..."` 不得附带 AI 署名 trailer。
147
+
148
+ ## 9. 参考示例
149
+
150
+ - `feat(eui): 添加 Image 组件懒加载支持`
151
+ - `refactor(backend): 提取分页逻辑为共享工具`
152
+ - `fix(eui)!: 重构 EDialog open 属性为 v-model:open`
153
+ - `BREAKING CHANGE: EDialog 不再接受 visible 属性,请改用 v-model:open`
@@ -14,6 +14,8 @@ description: PostgreSQL 安全与配置规范(参数化查询、应用用户
14
14
  |------|------|
15
15
  | 参数化查询 | **禁止**字符串拼接 SQL(用 ORM 或 `text(... :param)` 参数绑定) |
16
16
  | 应用用户权限 | 只授予 SELECT / INSERT / UPDATE / DELETE,**不给** DROP / CREATE / ALTER / SUPERUSER |
17
+ | 端口暴露 | **禁止**将 `5432` 直接暴露到公网;仅允许 VPC / 内网 / 跳板机访问 |
18
+ | 运行权限 | PostgreSQL 服务进程**禁止**以 `root` 用户运行,必须使用专用低权限系统用户 |
17
19
  | 连接池 | `pool_size ≤ 20`,`max_overflow ≤ 10` |
18
20
  | SSL 连接 | 生产环境启用 `sslmode=require` |
19
21
  | 敏感字段加密 | 身份证号 / 银行卡 / 手机号原文等使用 AES 加密**存储**,不仅展示脱敏 |
@@ -25,6 +27,8 @@ description: PostgreSQL 安全与配置规范(参数化查询、应用用户
25
27
 
26
28
  生产环境**禁止**使用 `postgres` 超级用户跑应用;为每个应用创建独立用户,授权严格限定到 DML。
27
29
 
30
+ 数据库服务自身也**禁止**由 `root` 直接启动或托管,统一使用 `postgres` 或发行版默认专用系统账号运行。
31
+
28
32
  ```sql
29
33
  -- 创建应用专用用户(非超级用户)
30
34
  CREATE USER app_user WITH PASSWORD 'strong_password';
@@ -83,6 +87,8 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA public
83
87
  | SQL 拼接 | f-string / `%` / 字符串相加构造 SQL | **致命 → STOP** |
84
88
  | 应用用户超权 | 应用账号拥有 DROP / CREATE / ALTER / SUPERUSER | **致命 → STOP** |
85
89
  | 超级用户跑应用 | 应用以 `postgres` 或其他超级用户身份连接 | **致命 → STOP** |
90
+ | 公网开放 5432 | 安全组 / 防火墙 / LB 允许公网直连 PostgreSQL 端口 | **致命 → STOP** |
91
+ | root 运行数据库 | PostgreSQL 服务进程以 `root` 身份运行 | **致命 → STOP** |
86
92
  | 连接池超限 | `pool_size > 20` 或 `max_overflow > 10` | 高 |
87
93
  | 无 SSL | 生产环境连接串无 `sslmode=require` | 高 |
88
94
  | 敏感字段明文 | 身份证 / 银行卡等明文落库 | 高 |
@@ -21,15 +21,18 @@ description: Redis 安全与使用规范(必须用 dwyeapi 客户端、密码
21
21
  | 规则 | 说明 |
22
22
  |------|------|
23
23
  | 认证 | **必须**设置 `requirepass`,无密码 Redis 一律拒绝接入生产 |
24
- | 绑定地址 | `bind 127.0.0.1` 或内网地址,**禁止** `bind 0.0.0.0` |
24
+ | 绑定地址 | `bind 127.0.0.1` 或内网地址,**禁止** `bind 0.0.0.0`,**禁止**通过安全组 / 防火墙 / LB 直接暴露 `6379` 到公网 |
25
+ | 运行权限 | Redis 进程**禁止**以 `root` 用户运行,必须使用专用低权限用户 |
25
26
  | 危险命令 | **禁用**或重命名 `FLUSHALL` / `FLUSHDB` / `CONFIG` / `KEYS` / `DEBUG` |
26
- | 内存上限 | 设 `maxmemory` 与 `maxmemory-policy`(推荐 `allkeys-lru`),防止 OOM |
27
+ | 内存上限 | Redis 运行**必须**显式设置 `maxmemory` 与 `maxmemory-policy`(推荐 `allkeys-lru`),防止缓存无限膨胀或 OOM |
27
28
  | 持久化 | 根据用途选择:缓存可关 AOF;会话 / 黑名单需 AOF everysec |
28
29
 
29
30
  ```conf
30
31
  # redis.conf 关键项示例
31
32
  requirepass <strong-password>
32
33
  bind 127.0.0.1
34
+ port 6379
35
+ maxclients 10000
33
36
  rename-command FLUSHALL ""
34
37
  rename-command FLUSHDB ""
35
38
  rename-command CONFIG ""
@@ -39,6 +42,12 @@ maxmemory 256mb
39
42
  maxmemory-policy allkeys-lru
40
43
  ```
41
44
 
45
+ ```ini
46
+ # systemd/service 示例
47
+ User=redis
48
+ Group=redis
49
+ ```
50
+
42
51
  ---
43
52
 
44
53
  ## 三、Key 设计规范(强制)
@@ -79,10 +88,13 @@ await redis.set("myapp:cache:user:uuid:f7e2", json_data, ex=300)
79
88
  | 检查项 | 违规模式 | 严重程度 |
80
89
  |--------|---------|---------|
81
90
  | 绑定 0.0.0.0 | 服务对公网暴露 | **致命 → STOP** |
91
+ | 公网开放 6379 | 安全组 / 防火墙 / LB 允许公网直连 Redis 端口 | **致命 → STOP** |
82
92
  | 无密码 | 生产 Redis 未设 `requirepass` | **致命 → STOP** |
93
+ | root 运行 | Redis 进程以 `root` 身份启动 | **致命 → STOP** |
83
94
  | 存敏感原文 | 密码 / 身份证 / token 明文存 Redis | **致命 → STOP** |
84
95
  | 自建连接池 | 业务代码 `aioredis.from_url(...)`,未走 dwyeapi 缓存模块 | 高 |
85
96
  | 危险命令未禁 | `FLUSHALL` / `KEYS` / `CONFIG` 等可在生产执行 | 高 |
97
+ | 未设 `maxmemory` | Redis 未设置缓存最大可用内存或未配置淘汰策略 | **致命 → STOP** |
86
98
  | Key 无 TTL | `redis.set()` 没有 `ex` 参数(业务上明确永久存储除外) | 中 |
87
99
  | Key 无前缀 | Key 无项目前缀,污染共享 Redis | 中 |
88
100
  | Pub/Sub 当队列 | 业务关键消息走 Pub/Sub | 高 |
@@ -26,6 +26,7 @@ description: "部署后线上环境基础安全巡检:远程 SSH 到目标服
26
26
  | `references/checks-network.md` | 即将运行 4.1 / 4.2 / 4.4 / 4.7 类检查或解读其输出时 | SSH / Nginx / HTTPS / 依赖服务连通性 |
27
27
  | `references/checks-data.md` | 即将运行 4.3 / 4.5 / 4.11 类检查或解读其输出时 | 数据库暴露 / 环境变量 / 凭证强度 |
28
28
  | `references/checks-runtime.md` | 即将运行 4.6 / 4.8 / 4.9 / 4.10 类检查或解读其输出时 | Docker / 自愈 / 日志防爆 / 资源推荐 |
29
+ | `references/security-doc-search.md` | 本地 checks 不够判定、需要查官方安全文档、需要按版本追 CVE、或需要把新规则沉淀回 skill 时 | 权威文档检索策略 / 官方来源清单 / 沉淀规则 |
29
30
 
30
31
  ---
31
32
 
@@ -46,12 +47,13 @@ description: "部署后线上环境基础安全巡检:远程 SSH 到目标服
46
47
  1. 收集目标信息 → 确认 SSH 连接、目标服务范围
47
48
  2. 连通性测试 → SSH 登录、sudo 权限确认
48
49
  3. 基础环境识别 → 系统版本、已部署服务清单
49
- 4. 分类检查 → SSH / Nginx / DB / HTTPS / Env / Docker / Services / Resilience / Logs / Capacity / Secrets(主 Bash 调用 run_all.sh,12 路并行)
50
- 5. 生成报告 → 按等级聚合,Markdown 格式
51
- 6. 修复建议 → 每条问题给出修复方向(不执行)
50
+ 4. 权威文档检索 → 必要时查官方文档 / CVE / OWASP,补足判定依据
51
+ 5. 分类检查 → SSH / Nginx / DB / HTTPS / Env / Docker / Services / Resilience / Logs / Capacity / Secrets(主 Bash 调用 run_all.sh,12 路并行)
52
+ 6. 生成报告 → 按等级聚合,Markdown 格式
53
+ 7. 修复建议 → 每条问题给出修复方向(不执行)
52
54
  ```
53
55
 
54
- **共 6 步,按顺序执行。**
56
+ **共 7 步,按顺序执行。**
55
57
 
56
58
  ---
57
59
 
@@ -115,7 +117,44 @@ ssh ${TARGET} "
115
117
 
116
118
  ---
117
119
 
118
- ## Step 4: 分类检查(并行执行)
120
+ ## Step 4: 权威文档检索(必要时执行)
121
+
122
+ 当出现以下任一情况,**先读** `references/security-doc-search.md`,再用 WebSearch / 官方站点检索:
123
+
124
+ 1. `references/checks-*.md` 里只有抽象规则,没有给出当前版本依据
125
+ 2. audit 输出出现了明确版本号,需要判断是否存在已知高危 CVE
126
+ 3. 配置项语义、默认值、版本门槛不确定
127
+ 4. 用户明确要求“按官方安全文档”解释
128
+ 5. 本次发现适合沉淀回长期规则
129
+
130
+ ### 强制来源顺序
131
+
132
+ 1. 官方产品文档 / 官方 security 页面
133
+ 2. 官方 release notes / advisories
134
+ 3. CISA KEV / NVD / CVE
135
+ 4. OWASP Cheat Sheet
136
+
137
+ **禁止**把论坛、博客、AI 聚合页当唯一依据。
138
+
139
+ ### 强制检索输出
140
+
141
+ 每次外部检索至少产出 3 个字段:
142
+
143
+ | 字段 | 说明 |
144
+ |------|------|
145
+ | `source` | 权威来源 URL |
146
+ | `claim` | 从文档得到的明确结论 |
147
+ | `impact` | 这条结论如何影响本次分级 / 判定 / 修复建议 |
148
+
149
+ ### 需要沉淀时怎么做
150
+
151
+ - 可复用的配置语义 / 检查基线 → 回写对应 `references/checks-*.md`
152
+ - 可复用的检索方法 / 来源入口 → 回写 `references/security-doc-search.md`
153
+ - 单次版本漏洞情报 → 只写进本次报告,不固化成长期规则
154
+
155
+ ---
156
+
157
+ ## Step 5: 分类检查(并行执行)
119
158
 
120
159
  **主 Claude 直接用 Bash 调用 `run_all.sh`,12 路并行跑完全部检查类目**,把原始输出落到 `/tmp/dwy_audit_<host>.txt`,再由主 Claude `Read` 文件后做分析。
121
160
 
@@ -251,7 +290,7 @@ bash {scripts}/check_db.sh <target> [ssh_opts...]
251
290
 
252
291
  ---
253
292
 
254
- ## Step 5: 生成报告
293
+ ## Step 6: 生成报告
255
294
 
256
295
  报告必须为 Markdown 格式,**核心是"完整检查清单 + 状态可视化"** — 让用户一眼看到"检查了哪些 / 通过哪些 / 失败哪些 / 跳过哪些 / 未覆盖哪些"。
257
296
 
@@ -441,7 +480,7 @@ bash {scripts}/check_db.sh <target> [ssh_opts...]
441
480
 
442
481
  ---
443
482
 
444
- ## Step 6: 修复建议(只输出,不执行)
483
+ ## Step 7: 修复建议(只输出,不执行)
445
484
 
446
485
  **严格禁止:**
447
486
 
@@ -455,6 +494,7 @@ bash {scripts}/check_db.sh <target> [ssh_opts...]
455
494
  - 在报告中给出修复命令片段(供用户复制)
456
495
  - 解释修复后的影响和验证方法
457
496
  - 推荐修复优先级
497
+ - 给出本次实际引用过的权威文档 URL
458
498
 
459
499
  ---
460
500
 
@@ -35,6 +35,17 @@
35
35
  | `rename-command` | 危险命令(FLUSHALL/CONFIG)已重命名 | medium |
36
36
  | Redis 版本 | 非已知 CVE 版本 | medium |
37
37
 
38
+ **Redis 版本判定补充:**
39
+
40
+ - 配置语义先看官方安全文档:`https://redis.io/docs/latest/operate/oss_and_stack/management/security/`
41
+ - 版本安全再搜:`redis <version> CVE`、`redis <version> security advisory`
42
+ - 优先来源:Redis 官方、NVD、CISA KEV
43
+ - 分级规则:
44
+ - Redis 外网暴露 + 命中高危 CVE / KEV → **critical**
45
+ - Redis 仅内网暴露,但命中高危 CVE → high
46
+ - 未命中高危 CVE,但版本明显偏旧且无安全维护依据 → medium
47
+ - 如 `bind`、`protected-mode`、公网暴露本身已不合规,按对应配置项分级;不要把“版本风险”和“暴露风险”混成一条。
48
+
38
49
  ---
39
50
 
40
51
  ## 4.5 环境变量 / 文件权限 — `{scripts}/check_env.sh`
@@ -49,6 +49,20 @@
49
49
  | 暴露的 location | 排查 `/.git`、`/.env`、`/admin` 是否泄漏 | **critical** |
50
50
  | Nginx 版本 | 非已知 CVE 版本 | medium |
51
51
 
52
+ **Nginx 版本判定补充:**
53
+
54
+ - 先查官方配置语义:
55
+ - headers 模块:`https://nginx.org/en/docs/http/ngx_http_headers_module.html`
56
+ - SSL 模块:`https://nginx.org/en/docs/http/ngx_http_ssl_module.html`
57
+ - 再查版本安全:
58
+ - 搜索词:`nginx <version> security advisory`、`nginx <version> CVE`
59
+ - 优先来源:Nginx 官方公告、NVD、CISA KEV
60
+ - 分级规则:
61
+ - 命中 **CISA KEV** 或存在明确在野利用记录 → **critical**
62
+ - 命中高危 CVE(建议按 CVSS ≥ 7.0 参考),但未见在野利用 → high
63
+ - 未命中高危 CVE,但版本明显老旧且缺少后续安全修复依据 → medium
64
+ - 如果只是配置项(如 `ssl_protocols`、`ssl_stapling`、`add_header ... always`)语义不清,不按“版本风险”报,改为引用官方模块文档解释配置风险。
65
+
52
66
  ---
53
67
 
54
68
  ## 4.4 HTTPS 证书 — `{scripts}/check_https.sh`
@@ -34,6 +34,22 @@
34
34
  | **daemon `registry-mirrors`**(时区在 PRC 时) | 至少 1 个国内源(daocloud / aliyun / ustc / tsinghua) | high(PRC 无配置)/ info(境外) |
35
35
  | **运行容器使用境外 registry**(`gcr.io` `ghcr.io` `k8s.gcr.io` `quay.io` `mcr.microsoft.com` `nvcr.io` `docker.elastic.co`)且时区在 PRC | 改用 `<registry>.m.daocloud.io` 前缀(`registry-mirrors` **不**对它们生效) | high |
36
36
 
37
+ **Docker 版本与暴露面判定补充:**
38
+
39
+ - 官方基础文档:
40
+ - Engine security:`https://docs.docker.com/engine/security/`
41
+ - daemon remote access:`https://docs.docker.com/engine/daemon/remote-access/`
42
+ - logging driver:`https://docs.docker.com/engine/logging/configure/`
43
+ - OWASP Docker Security Cheat Sheet:`https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html`
44
+ - 版本安全搜索词:
45
+ - `docker engine <version> CVE`
46
+ - `docker <version> security advisory`
47
+ - 分级规则:
48
+ - 命中 **CISA KEV**,或 Docker daemon TCP 端口公网暴露且无充分保护 → **critical**
49
+ - 命中高危 CVE(建议按 CVSS ≥ 7.0 参考),但当前未见在野利用 → high
50
+ - 未命中高危 CVE,但版本过旧且缺少持续维护依据 → medium
51
+ - `docker.sock` 挂载、`--privileged`、2375/2376 暴露属于**配置暴露面**,优先按当前表里的配置项分级,不要被“版本没问题”掩盖。
52
+
37
53
  ---
38
54
 
39
55
  ## 4.8 自愈与资源耗尽防护 — `{scripts}/check_resilience.sh`