Web Analytics

wicketkeeper

⭐ 199 stars Spanish by a-ve

wicketkeeper

Go Node.js Express.js TypeScript Docker

Un sistema captcha basado en prueba de trabajo (PoW) que respeta la privacidad, diseñado para ser una alternativa centrada en el usuario a los captchas tradicionales. Wicketkeeper protege tus formularios web de bots simples sin requerir que los usuarios resuelvan puzzles frustrantes.

Lo logra mediante la emisión de un pequeño desafío computacional del lado del cliente que es fácil de resolver para un dispositivo moderno pero costoso para los bots realizar a escala. El sistema está compuesto por un backend en Go, un cliente JavaScript embebible y una aplicación demo full-stack.


Tabla de Contenidos

Características

Cómo Funciona

El ecosistema Wicketkeeper involucra cuatro actores principales: el Navegador del Usuario, el Widget Cliente, el Backend de su Aplicación y el Servidor Wicketkeeper.

sequenceDiagram
    %% define IDs and human-readable labels
    participant UB as "User's Browser"
    participant CW as "Client Widget"
    participant AB as "Your App Backend"
    participant WKS as "Wicketkeeper Server"

UB->>+CW: User interacts with form CW->>+WKS: GET /v0/challenge WKS-->>-CW: Returns signed JWT (Challenge + Difficulty)

CW->>CW: Solves Proof-of-Work in-browser Note over CW: Finds a valid nonce/hash pair CW-->>UB: Populates hidden form field with solution

UB->>+AB: Submits form with solution data AB->>+WKS: POST /v0/siteverify (with solution) WKS->>WKS: Verify JWT, Check PoW hash and Bloom-filter WKS-->>-AB: Returns success/failure

alt Verification Successful AB->>AB: Process form data (e.g., save comment) AB-->>UB: Show success message else Verification Failed AB-->>UB: Show error message end

Estructura del Proyecto

El repositorio está organizado en tres componentes principales:

.
├── client/          # The frontend JS widget that solves the PoW challenge
├── server/          # The Go backend that issues and verifies challenges
├── example/         # A full-stack Express.js demo application
└── README.md        # This file

Comenzando: Configuración completa de la demostración

Esta guía te ayudará a ejecutar todo el ecosistema de Wicketkeeper, incluyendo el servidor backend, el widget cliente y la aplicación de ejemplo.

Requisitos previos

Paso 1: Clonar el repositorio

git clone https://github.com/a-ve/wicketkeeper.git
cd wicketkeeper

Paso 2: Ejecutar los Servicios Backend

La forma más sencilla de ejecutar el servidor Go y su dependencia Redis es con Docker Compose.

cd server/
mkdir data
docker-compose up -d

Esto construirá y arrancará el servicio Go wicketkeeper en el puerto 8080 y un contenedor redis-stack. En la primera ejecución, se generará un archivo wicketkeeper.key en server/data/.

Paso 3: Construir el Widget del Cliente

El widget del cliente necesita ser compilado en un solo archivo JavaScript.

cd ../client/
npm install
npm run build:fast

Esto crea client/dist/fast.js. Ahora, copie este archivo al directorio público de la aplicación de ejemplo:

cp dist/fast.js ../example/public/

Paso 4: Ejecutar la Aplicación de Ejemplo

El ejemplo es un servidor Express.js que sirve un formulario HTML simple y maneja envíos.

cd ../example/
npm install

Compile the TypeScript code

npx tsc

Start the server

node dist/server.js
Deberías ver la salida: 🚀 Server listening on http://localhost:8081.

Ahora puedes navegar a en tu navegador para ver la demostración de Wicketkeeper en acción.

Uso de Componentes Individuales

Servidor Wicketkeeper (Go)

El servidor se configura mediante variables de entorno. Consulta server/README.md para más detalles.

| Variable | Descripción | Predeterminado | | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | LISTEN_PORT | El puerto en el que el servidor escuchará. | 8080 | | REDIS_ADDR | La dirección de la instancia de Redis. | 127.0.0.1:6379 | | REDIS_DB | Número de base de datos de Redis (0-15). Nota: Redis Cluster solo soporta DB 0. | 0 | | DIFFICULTY | Número de ceros iniciales para el hash PoW. Más alto es más difícil. | 4 | | ALLOWED_ORIGINS | Lista separada por comas de orígenes para CORS (ej., https://domain.com). | * | | BASE_PATH | Ruta base para el servidor. Nota: Para rutas distintas a / debes usar data-challenge-url cuando uses el cliente. Ver aquí. | / | | PRIVATE_KEY_PATH | Ruta para almacenar la clave privada Ed25519. Se creará si no existe. | ./wicketkeeper.key |

Endpoints de la API:

Widget Cliente (JavaScript)

El cliente es un único archivo JS (dist/fast.js o dist/slow.js) que puede incluirse en cualquier página HTML.

1. Incluir el Script

2. Agregar el Widget a un Formulario

El script inicializa automáticamente cualquier div con la clase .wicketkeeper.

El cliente puede configurarse con un endpoint de desafío personalizado durante el paso de compilación. Consulte client/README.md para más detalles.

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-08 ---