Web Analytics

wicketkeeper

⭐ 199 stars Japanese by a-ve

wicketkeeper

Go Node.js Express.js TypeScript Docker

ユーザー中心の従来型キャプチャの代替となるよう設計された、プライバシーに配慮したプルーフ・オブ・ワーク(PoW)キャプチャシステムです。Wicketkeeperは、ユーザーに煩わしいパズルを解かせることなく、単純なボットからウェブフォームを保護します。

これは、最新のデバイスで簡単に解けるが、ボットが大量に実行するにはコストのかかる、小さなクライアント側の計算チャレンジを発行することで実現しています。システムはGoのバックエンド、埋め込み可能なJavaScriptクライアント、およびフルスタックのデモアプリケーションで構成されています。


目次

特徴

動作原理

Wicketkeeperのエコシステムには、ユーザーのブラウザ、クライアントウィジェット、あなたのアプリケーションバックエンド、そしてWicketkeeperサーバーの4つの主要な役割が含まれます。

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

プロジェクト構成

リポジトリは3つの主要なコンポーネントに分かれています:

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

これはポート 8080wicketkeeper Go サービスと redis-stack コンテナをビルドして起動します。初回実行時に server/data/wicketkeeper.key ファイルが生成されます。

ステップ 3: クライアントウィジェットのビルド

クライアントウィジェットは単一のJavaScriptファイルにコンパイルする必要があります。

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

これにより client/dist/fast.js が作成されます。次に、このファイルをサンプルアプリケーションのパブリックディレクトリにコピーします:

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ハッシュの先頭に必要なゼロの数。数値が大きいほど難易度が高い。 | 4 | | ALLOWED_ORIGINS | CORS用のオリジンのカンマ区切りリスト(例: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. フォームにウィジェットを追加する

スクリプトは、クラスが .wicketkeeperdiv を自動的に初期化します。

クライアントはビルドステップ中にカスタムチャレンジエンドポイントで構成できます。詳細は client/README.md を参照してください。

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