本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验。
本项目通过 Vibe Coding 实现。
- Protobuf 二进制通信。前端与后端通过 Protobuf 二进制格式进行 HTTP 通信,作为简单的逆向门槛。
禁用主流邮箱。本意是在通过设计阻止用户泄露邮箱和常用密码,但是用户往往不会去考虑使用临时邮箱,故暂时强制使用 32 位及以上的复杂密码以用户阻止泄露常用密码。- 黑盒密码强度判定。注册密码除必须包含大小写字母、数字和特殊符号外,还需要通过额外的字符串结构强度校验;重复片段、明显周期、长回文和连续序列都会显著降低评分,只有达到“复杂”才允许注册。
- 显式工作量证明 Proof-of-Work (PoW)。用户需要手动找到一个随机 16 位前缀的 sha-256 值符合特定难度(20位前导零)的字符串。
- 年龄唯一性约束。每个年龄只允许被一位用户占用,系统在初始化时将创建若干虚假账户占用 0-99 的年龄区间。
- 虚假用户。当一个新邮箱尝试注册时,系统会先创建一个虚假用户并提示“密码已被用户xx占用”。
- WebAuthn (Passkey) 验证。强制要求使用 WebAuthn 进行两步验证,并阻止用户登录系统创建的虚假用户。
- i18n 支持。但是考虑到用户都是中文用户,故特意去除了中文,以及英语。
- 后端: Go 1.22+ / Protobuf / SQLite / PostgreSQL
- 前端: Astro / TypeScript / Protobuf.js
- 架构: 前后端分离,通过 Protobuf over HTTP 交互
本项目支持 Docker 一键部署。
确保您的服务器已安装 Docker 和 Docker Compose。
git clone https://github.com/nhirsama/foolsignup.git
cd foolsignup修改 docker-compose.yml 。核心变量说明:
| 变量名 | 说明 | 示例 |
|---|---|---|
DB_TYPE |
数据库类型,支持 sqlite/postgres(兼容 postgresql/psql/pqsql) |
sqlite |
DB_SQLITE_PATH |
SQLite 文件路径(仅 DB_TYPE=sqlite 时生效) |
/app/data/data.db |
DB_DSN |
PostgreSQL DSN(仅 DB_TYPE=postgres 时生效,需自行部署 PostgreSQL) |
host=127.0.0.1 port=5432 user=postgres password=postgres dbname=foolsignup sslmode=disable |
ALLOWED_ORIGIN |
允许跨域的域名(前端访问地址) | https://signup.example.com |
TRUSTED_PROXY_CIDRS |
额外可信反向代理网段(逗号分隔)。只有来自可信代理的 X-Forwarded-For / X-Real-IP 才会被用于限流判定 |
203.0.113.0/24,2001:db8:100::/64 |
MAIL_API_ENDPOINT |
邮件服务 API 地址 (基于 HTTP POST) | https://api.cyberpersons.com/email/send |
MAIL_API_KEY |
邮件服务 API Key | your_secret_key |
MAIL_FROM |
发件人邮箱 | noreply@example.com |
TURNSTILE_SECRET_KEY |
Cloudflare Turnstile 服务端密钥。配置后,发送 PoW 验证码前必须通过 Turnstile 校验 | 0x4AAAA... |
数据库切换示例:
- 使用 SQLite(默认):
DB_TYPE=sqlite - 使用 PostgreSQL:
DB_TYPE=postgres,并设置DB_DSN(PostgreSQL 需自行安装/部署) - 若部署在反向代理之后且代理地址不属于回环/私有网段,请设置
TRUSTED_PROXY_CIDRS,否则应用会直接使用连接对端地址进行限流。 - 本地环回地址、RFC1918 私有地址和链路本地地址默认已经被视为可信代理,不需要再额外写进
TRUSTED_PROXY_CIDRS。
使用 Docker Compose 构建并运行:
docker-compose up -d --build服务启动后:
- 后端 API 将运行在
http://localhost:16241(映射自 3001)。 - 若使用 SQLite,数据库文件将持久化在当前目录下的
./data/data.db。 - 若使用 PostgreSQL,数据持久化由你自行部署的 PostgreSQL 负责。
建议将前端部署在 Cloudflare Pages, Vercel 或作为静态文件托管。
pnpm installpnpm build请配置环境变量 PUBLIC_API_URL 并指向后端 URL。
如需启用发送 PoW 验证码前的 Cloudflare Turnstile,请额外配置 PUBLIC_TURNSTILE_SITE_KEY,并在后端同时配置 TURNSTILE_SECRET_KEY。