From 0348b959bb9b8084e6dffea238ccb5bd1a1a0aee Mon Sep 17 00:00:00 2001 From: qing <1776177662@qq.com> Date: Wed, 5 Aug 2026 16:26:23 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=90=8C=E6=AD=A5=20static=20=E4=B8=8E?= =?UTF-8?q?=20waf=20README=20=E8=87=B3=E5=AE=A1=E8=AE=A1=E5=90=8E=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - static: 移除/标注已禁用的 reset_password 与 yhdet 系列路由,更新 check_user 为经 db 服务查询,补充代理路由 CORS 通配例外说明 - waf: 明确 CRS 需先 _fetch_crs.sh 才生效,未拉取时 WAF 开箱无拦截能力 --- static/README.md | 16 ++++++---------- waf/README.md | 4 +++- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/static/README.md b/static/README.md index 9a46100..f33f0fd 100644 --- a/static/README.md +++ b/static/README.md @@ -49,18 +49,12 @@ static :9200 (Flask + CORS) | 路径 | 说明 | |------|------| | `POST /api/hash` | SHA256 密码哈希 | -| `POST /api/check_user` | 检查用户是否已注册(查询 gateway 数据库) | -| `POST /api/reset_password` | 重置用户密码(直接操作 gateway 数据库) | +| `POST /api/check_user` | 检查用户是否已注册(经 db:8005 服务 pymsg 调用查询) | | `GET /api/favicon?url=` | favicon 服务端代理(dnfs 链接卡片用;SSRF 防护:仅 http/https + 内网地址拦截 + 重定向校验,512KB 上限,缓存 1 天) | -### yhdet OAuth 路由 - -| 路径 | 说明 | -|------|------| -| `GET/POST /yhdet_callback` | yhdet.top OAuth 回调,自动注册/登录并跳转 dnfs 页 | -| `POST /api/yhdet_login` | yhdet OAuth 用户名密码登录 | -| `POST /api/yhdet_verify` | yhdet Token 验证 | -| `POST /api/proxy_send_code` | yhdet 验证码代理转发 | +> 以下路由已在安全审计修复中**禁用**(源码以 `#` 注释,不再对外暴露): +> - `POST /api/reset_password` — 无认证可接管任意账户(原 P0-1) +> - `GET/POST /yhdet_callback`、`POST /api/yhdet_login`、`POST /api/yhdet_verify`、`POST /api/proxy_send_code` — yhdet OAuth 系列(原 P0-2/3/4、NEW-1/2) ### dnfs 代理路由 @@ -73,6 +67,8 @@ static :9200 (Flask + CORS) 以上 4 个 dnfs 代理路由均支持 HttpOnly Cookie 模式:当请求携带 `q4_token` Cookie 时,自动转为 `Authorization: Bearer` 头转发。 +> **CORS 例外**:全局 CORS 使用 `[cors] allowed_origins` 白名单;但上述 4 个 dnfs 代理路由的 OPTIONS 预检由 `_cors()` 处理,返回 `Access-Control-Allow-Origin: *`(通配)。若需收紧,应按白名单改造 `_cors()`(安全审计 NEW-3 未修复)。 + > `/whoami` 已上移至 gateway,由 gateway 直接验签 Token 返回用户身份,不再经 static 代理到 dnfs。 ## 功能 diff --git a/waf/README.md b/waf/README.md index e0ac488..ee5dbed 100644 --- a/waf/README.md +++ b/waf/README.md @@ -342,7 +342,7 @@ WAF 支持透明代理 WebSocket 连接(如 aibox 的 WebSocket 接口)。 - CSP 仍含 `'unsafe-inline'`(为兼容 forgot.html 与 games/*.html 的内联脚本),待前端清理后可收紧。 - HSTS 已启用(半年期,不含子域),站点全量 HTTPS 覆盖后可按需收紧。 - logclient 日志推送每次新建 TCP 短连接,高并发拦截场景可能产生较多 TIME_WAIT;db 地址硬编码 `127.0.0.1:8005`,不支持环境变量配置。 -- **默认规则全部注释**:`rules/local/custom.conf` 中自定义规则默认注释,需手动取消注释或拉取 OWASP CRS 后才有实际拦截效果。启动时无 warning 提示。 +- **默认规则全部注释**:`rules/local/custom.conf` 中自定义规则默认注释,需手动取消注释或拉取 OWASP CRS 后才有实际拦截效果。启动时无 warning 提示。**注意:CRS 规则目录不入库,需先在部署机执行 `_fetch_crs.sh`;未拉取 CRS 时 WAF 开箱无拦截能力。** - 缺少 SIGINT/SIGTERM 优雅关闭,进程终止时进行中的请求被暴力中断,logclient 队列中未发送的日志可能丢失。 - 标准日志(`log.SetOutput`)被静默到 `io.Discard`,net/http 的 panic 堆栈和 TLS 错误不可见。 @@ -355,6 +355,8 @@ WAF 支持透明代理 WebSocket 连接(如 aibox 的 WebSocket 接口)。 - **feat**: `tuning.conf` 独立于自动生成的 `crs/coraza.conf`,重跑 `_fetch_crs.sh` 不会覆盖调优配置 - 校验:SQLi / XSS / 路径遍历 / 命令注入均命中 949110 拦截,正常请求放行 +> **⚠️ 生效前提**:CRS 规则目录 `rules/crs/` 被 `.gitignore` 排除,不入库。**必须先在某台机器上执行 `bash _fetch_crs.sh` 拉取 CRS 规则**,`crs/coraza.conf` 存在后 engine 才会自动加载并启用自动拦截。若未拉取 CRS,实际生效的仅有 `custom.conf`(默认全注释)+ `tuning.conf`(仅 setvar),**WAF 开箱无拦截能力**。部署时请务必先拉取 CRS 或启用 `custom.conf` 中的兜底规则。 + ### v1.2(2026-08-01)— WebSocket 支持 + 修复 - **feat**: WebSocket 透明代理支持,`responseRecorder` 实现 `http.Hijacker` 接口