Skip to content

nhirsama/foolsignup

Repository files navigation

Fool Signup 愚人注册

本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验。

本项目通过 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 一键部署。

1. 环境准备

确保您的服务器已安装 DockerDocker Compose

2. 获取源码

git clone https://github.com/nhirsama/foolsignup.git
cd foolsignup

3. 配置环境变量

修改 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

4. 启动服务

使用 Docker Compose 构建并运行:

docker-compose up -d --build

服务启动后:

  • 后端 API 将运行在 http://localhost:16241 (映射自 3001)。
  • 若使用 SQLite,数据库文件将持久化在当前目录下的 ./data/data.db
  • 若使用 PostgreSQL,数据持久化由你自行部署的 PostgreSQL 负责。

前端部署 (Astro)

建议将前端部署在 Cloudflare Pages, Vercel 或作为静态文件托管。

1. 安装依赖

pnpm install

2. 构建

pnpm build

3. 配置

请配置环境变量 PUBLIC_API_URL 并指向后端 URL。 如需启用发送 PoW 验证码前的 Cloudflare Turnstile,请额外配置 PUBLIC_TURNSTILE_SITE_KEY,并在后端同时配置 TURNSTILE_SECRET_KEY

About

本项目是一个愚人节项目,意在通过刻意设计给用户带来不好的使用体验

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors