chore: initial snapshot of 2meet-data-optimizer v0.1.0

Baseline before backporting wp-data-optimizer v3.0.1-v3.4.6.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbG1keQQ7XBa7qMQY16KCY
This commit is contained in:
2026-07-31 05:06:36 +08:00
commit d36bb954d1
206 changed files with 66538 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
# Security Policy
## Supported versions
| Version | Supported |
|---|:-:|
| 0.1.x | ✅ |
> 來源外掛 `wp-data-optimizer v2.x` 仍接受安全修補,但新功能不再回 port。
---
## Reporting a vulnerability
請勿在 public GitHub issue 揭露安全問題。透過以下管道私下回報:
- Email: security@2meet.io
- PGP key: TBD(首次回報時索取)
我們承諾:
- 24h 內初步回應
- 7 天內提供修補時程
- 90 天內出 patch releaseCVSS ≥ 7 立即出版)
---
## 安全設計重點
### Crypto
- AES-256-GCM AEADv2 格式 `enc:v2:`
- v1 (AES-256-CBC `enc:v1:`) 向後相容讀取
- Auth tag 16B + tamper detection
- Key 衍生自 `AUTH_KEY` + `SECURE_AUTH_SALT`,每站獨一
### SQL injection
- 100% `$wpdb->prepare()`,含動態 IN 子句用 `array_fill('%d')` 動態佔位符
- 欄位名走 `sanitize_key()`
- DROP TABLE 前白名單 + prefix 雙重驗證
### Authorization
- Capability 檢查:`manage_options`admin tab/ `edit_posts`(部分 REST
- Nonce 驗證所有 AJAX + 表單
### Output / Input
- 輸出:`esc_html()` / `esc_attr()` / `esc_url()`
- 輸入:`sanitize_text_field()` / `absint()` / `wp_unslash()`
- Unserialize`WPDO_Safe_Unserialize::run()``['allowed_classes' => false]`
### File upload
- 不接受 file upload。
### Rate limiting
- REST endpoints 採 transient-based limiter(見 `class-tmdo-rest-api.php`
---
## 已知 Risk
- (本版本暫無已知安全 riskPhase 1 ship 時補)
---
## 來源外掛安全沿革
- v2.6.4 H-4:加密 Slack/Discord/Telegram 密鑰
- v2.6.5 A-4Spoke 明文 JWT 持久化完全移除
- v2.13.3 audit 7/7 finding 全清零(M-AUTH-1 / M-LOGIC-1 / L-AUTH-1 / L-CFG-1 / L-DESER-1 / L-SSRF-1 / L-CRYPTO-1
- v2.15.0 AES-256-CBC → AES-256-GCM AEAD 升級
詳見 `~/.claude/plans/wp-data-optimizer-2meet-data-optimizer-zesty-liskov.md` § 1.1。