Noir0x63/Command-Control-Forum
GitHub: Noir0x63/Command-Control-Forum
一个基于零信任架构和客户端 ECDSA 数字签名的安全 Web 论坛,通过多层加密与反机器人机制实现帖子不可否认性和防御自动化攻击。
Stars: 1 | Forks: 0
# Command & Control 论坛
一个现代化、轻量级且高度安全的 Web 论坛,其视觉设计灵感源自 Command and Control 控制台美学。该论坛在浏览器端使用客户端非对称加密技术,确保每个主题、回复和投票都由其作者进行数字签名,从而实现了严格的不可否认性安全模型。
## 技术架构与强化
该平台旨在防御常见的攻击向量和自动注册机器人。系统分为一个零信任客户端应用程序和一个经过严格验证的 REST 和 WebSocket 后端。
### 1. 非对称加密与客户端密钥隔离
每个写操作(创建主题、评论或投票)都要经过加密签名验证:
* **ECDSA 密钥对:** 用户通过 Web Crypto API (`crypto.subtle`) 直接在浏览器中使用 NIST 批准的 P-256 曲线生成椭圆曲线数字签名算法 (ECDSA) 密钥对。
* **IndexedDB 中的不可提取密钥:** 为了防止跨站脚本攻击 (XSS) 或浏览器扩展窃取私钥,私钥被提交到本地浏览器数据库 (`IndexedDB`) 中,并设置 `extractable: false` 属性。私钥始终保留在浏览器的加密引擎内,无法通过 JavaScript 读取或导出。
* **服务器验证:** 后端不信任任何用户提供的元数据。它会导入用户的公钥(以 SPKI 格式存储),并在保存主题或评论之前验证精确 payload 字符串的 ECDSA 签名。
* **Argon2id 密码哈希:** 用户密码受 OWASP 推荐的 Argon2id 算法保护(64MB 内存开销,时间开销为 3,并行度为 4)。系统采用“读旧写新”的重新哈希包装器,在成功登录时自动且静默地升级传统的 scrypt 凭证。
### 2. 新鲜度协议与重放攻击缓解
为了防止攻击者捕获网络请求并重放它们以复制帖子或投票(重放攻击,Replay Attacks):
* **加密 Nonce:** 每个请求都需要一个客户端生成的唯一 UUIDv4 (`client_nonce`) 和一个微秒级精度的 UTC 时间戳 (`client_timestamp`)。
* **有状态检查:** 服务器保留所有已处理 nonce 的日志。它会拒绝任何重用 nonce 的请求,或者时间戳偏离服务器时间窗口超过 5 分钟的请求。
### 3. 防御性反机器人与抗女巫攻击
为了防止自动账户、抓取器和 Agentic AI 进行注册,在注册 endpoint 执行了多层检查:
* **工作量证明挑战:** 在提交注册之前,客户端必须解决一个受 CPU 限制的哈希挑战。它必须找到一个 salt 值,当该值与服务器提供的挑战字符串连接时,会产生一个以 4 个十六进制零开头的 SHA-256 哈希。这增加了批量注册的 CPU 开销,起到了隐式后台机器人检查的作用。
* **隐形诱饵 CAPTCHA (Honeypot):** 视觉 CAPTCHA 挑战对人类永久隐藏。`captcha-input` 字段被移出屏幕,作为隐形诱饵。扫描 HTML 的机器人会尝试填写它(这会立即触发注册拒绝),而人类用户将其留空,从而完全绕过视觉验证。
* **Honeypot 诱饵:** 多个动态 honeypot 字段(如 `Middle Name`、`Email Confirm` 等)通过随机类在屏幕外渲染。自动抓取器会填写这些字段,导致服务器拒绝注册请求。
### 4. 静默审核与账户清除
指挥官 (Commander) 拥有高级、静默的审核功能:
* **Shadowbanning:** 被标记为 shadowbanned 的用户仍然可以浏览、发帖并看到自己的内容。然而,服务器会动态修改 `GET /api/threads` 和 `GET /api/threads/:id/replies` 查询,以便为网络上的其他所有人过滤掉他们的主题和回复。
* **原子清除:** 执行用户清除会在 SQLite 中启动一个 ACID 事务,立即终止所有 WebSocket 连接,删除活动会话,并在整个数据库级联中清除与该用户关联的所有主题、评论和投票。
### 5. 后端速率限制与缓冲
* **Payload 大小限制:** WebSocket 服务器将握手和消息缓冲区 (`maxHttpBufferSize`) 限制为最大 5KB,防止因超大 payload 导致的内存耗尽。
* **速率限制器:** REST 写操作使用自定义速率限制器进行节流,该限制器将命中记录持久化到专用的数据库表中。
## 项目结构
* `server.js`: Express Web 服务器、REST endpoint、WAL 模式 SQLite 数据库持久化以及 Socket.io WebSocket 引擎。
* `server/captcha.js`: 向量路径计算、SVG 渲染和工作量证明验证模块。
* `public/app.js`: 前端应用状态、Web Crypto P-256 引擎、IndexedDB 密钥库以及 History API SPA 路由。
* `public/index.html`: 黑暗终端美学的 Shell 布局。
* `public/index.css`: UI 样式表。
* `setup.js`: 用于初始化管理员账户 (COMMANDER 角色) 的 CLI 工具。
## 安装与设置
1. **安装依赖:**
npm install
2. **配置管理员账户:**
由于管理员/指挥官账户无法从公共 Web 界面注册,因此您必须在本地配置初始凭证:
node setup.js --init-commander
按照提示配置您的用户名和访问密钥。
3. **启动 Web 服务器:**
npm start
或者,要通过集成的 Cloudflare 隧道自动启动应用程序,请运行:
.\deploy.bat
4. **访问:**
在浏览器中打开 `http://localhost:3000`(或公共隧道地址)。
### 云部署 (Render Blueprint)
本项目包含用于在 Render 上进行零配置部署的基础设施即代码:
1. 导航至 Render 仪表板上的 **Blueprints**。
2. 连接您的 Git 仓库。
3. Render 将解析 `render.yaml` 配置:
* 创建一个 Node.js Web 服务。
* 附加一个映射到 `/data` 的**持久化磁盘** (1GB),以在多次部署间持久化您的 SQLite 数据库。
* 生成一个加密强度极高的 `TOTP_PEPPER` 环境变量。
4. 启动部署。项目将自动编译原生依赖项(如 `argon2`)。
## 许可证
**GNU General Public License v3.0 (GPLv3)** — 详见 [许可证](LICENSE)。
本项目为自由软件:您可以根据自由软件基金会发布的 GNU GPLv3 条款对其进行重新分发和/或修改。
**由 Eduardo "Noir0x63" Camarillo 开发**
[noir0x63.github.io](https://noir0x63.github.io)
标签:ECDSA, MITM代理, Syscall, Web Crypto API, Web开发, 前端密码学, 自定义脚本, 论坛系统, 零信任架构