Web Analytics

wicketkeeper

⭐ 199 stars Korean by a-ve

wicketkeeper

Go Node.js Express.js TypeScript Docker

사용자 중심의 대안으로 설계된 프라이버시 친화적인 작업 증명(PoW) 캡차 시스템입니다. Wicketkeeper는 사용자가 짜증나는 퍼즐을 풀 필요 없이 간단한 봇으로부터 웹 폼을 보호합니다.

이는 최신 기기가 쉽게 해결할 수 있지만 봇이 대규모로 수행하기에는 비용이 많이 드는 소규모 클라이언트 측 계산 과제를 발급함으로써 달성됩니다. 이 시스템은 Go 백엔드, 임베디드 가능한 JavaScript 클라이언트, 그리고 풀스택 데모 애플리케이션으로 구성되어 있습니다.


목차

기능

작동 원리

위켓키퍼 생태계는 네 가지 주요 주체로 구성됩니다: 사용자의 브라우저, 클라이언트 위젯, 귀하의 애플리케이션 백엔드, 그리고 위켓키퍼 서버.

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

프로젝트 구조

리포지토리는 세 가지 주요 구성 요소로 구성되어 있습니다:

.
├── 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

시작하기: 전체 데모 설정

이 가이드는 백엔드 서버, 클라이언트 위젯, 예제 애플리케이션을 포함한 전체 Wicketkeeper 생태계를 실행하는 데 도움을 줍니다.

사전 요구사항

1단계: 저장소 복제하기

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

2단계: 백엔드 서비스 실행

Go 서버와 그에 의존하는 Redis를 실행하는 가장 쉬운 방법은 Docker Compose를 사용하는 것입니다.

cd server/
mkdir data
docker-compose up -d
이 명령은 포트 8080에서 wicketkeeper Go 서비스를 빌드하고 시작하며, redis-stack 컨테이너를 실행합니다. 첫 실행 시 server/data/wicketkeeper.key 파일이 생성됩니다.

3단계: 클라이언트 위젯 빌드

클라이언트 위젯은 하나의 JavaScript 파일로 컴파일되어야 합니다.

cd ../client/
npm install
npm run build:fast
이렇게 하면 client/dist/fast.js가 생성됩니다. 이제 이 파일을 예제 애플리케이션의 public 디렉터리로 복사하세요:

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

4단계: 예제 애플리케이션 실행

예제는 간단한 HTML 폼을 제공하고 제출을 처리하는 Express.js 서버입니다.

cd ../example/
npm install

Compile the TypeScript code

npx tsc

Start the server

node dist/server.js
출력에 다음과 같이 표시됩니다: 🚀 Server listening on http://localhost:8081.

이제 브라우저에서 로 이동하여 Wicketkeeper 데모를 직접 확인할 수 있습니다!

개별 컴포넌트 사용법

Wicketkeeper 서버 (Go)

서버는 환경 변수로 구성됩니다. 자세한 내용은 server/README.md를 참조하세요.

| 변수 | 설명 | 기본값 | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | LISTEN_PORT | 서버가 수신할 포트 번호입니다. | 8080 | | REDIS_ADDR | Redis 인스턴스의 주소입니다. | 127.0.0.1:6379 | | REDIS_DB | Redis 데이터베이스 번호(0-15). 참고: Redis 클러스터는 DB 0만 지원합니다. | 0 | | DIFFICULTY | PoW 해시의 선행 0 개수입니다. 숫자가 클수록 난이도가 높아집니다. | 4 | | ALLOWED_ORIGINS | CORS를 위한 출처(origin)들의 쉼표로 구분된 리스트입니다 (예: https://domain.com). | * | | BASE_PATH | 서버의 기본 경로입니다. 참고: / 이외의 경로를 사용할 경우 클라이언트에서 data-challenge-url을 사용해야 합니다. 자세한 내용은 여기에서 확인하세요. | / | | PRIVATE_KEY_PATH | Ed25519 개인키를 저장할 경로입니다. 없으면 생성됩니다. | ./wicketkeeper.key |

API 엔드포인트:

클라이언트 위젯 (JavaScript)

클라이언트는 단일 JS 파일(dist/fast.js 또는 dist/slow.js)로, 모든 HTML 페이지에 포함할 수 있습니다.

1. 스크립트 포함하기

2. 위젯을 폼에 추가하기

스크립트는 .wicketkeeper 클래스를 가진 모든 div를 자동으로 초기화합니다.

클라이언트는 빌드 단계에서 사용자 지정 챌린지 엔드포인트로 구성할 수 있습니다. 자세한 내용은 client/README.md를 참조하세요.

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