Files
wiki/Catalogue-Self-Hosted/apps/app-cap-captcha.md
T
2026-06-09 18:40:21 +02:00

5.5 KiB


title: Cap (Captcha) created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, captcha, securite, anti-bot, self-hosted] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/tiagostudio/cap]

💻 Cap (Captcha)

CAPTCHA open source auto-hébergé, alternative à hCaptcha et Google reCAPTCHA, sans tracking, sans envoi de données à un tiers, sans dépendance cloud.

📋 Informations Générales

Champ Valeur
Site web capjs.js.org
GitHub tiagostudio/cap
License Apache-2.0
Langage TypeScript (server) + JS/TS (client)
Étoiles GitHub 6 776
Catégorie cat-development
Note 100% gratuit et open source, auto-hébergeable, RGPD-friendly (pas de tracking Google), pas d'édition payante.

📝 Description

Cap est un CAPTCHA moderne, simple et open source, conçu comme une alternative éthique et auto-hébergeable à hCaptcha et reCAPTCHA. Contrairement à ces services, Cap :

  • Ne tracke pas les utilisateurs : pas de Google Analytics, pas de fingerprinting
  • Respecte le RGPD par design
  • N'envoie pas les données à un tiers : tout reste sur votre serveur
  • Propose plusieurs niveaux de difficulté (challenge visuel, computation proof-of-work)
  • API simple : un widget JS + un endpoint REST
  • Multi-tenant : un seul serveur peut servir plusieurs sites
  • Themes : clair, sombre, custom

Comment ça marche :

  1. Le serveur Cap génère un challenge (image puzzle, PoW…)
  2. Le widget JS du client soumet la réponse
  3. Le serveur vérifie et renvoie un token
  4. L'app valide le token côté backend

Types de challenges supportés :

  • Image : sélectionner les images qui correspondent (style hCaptcha)
  • Proof-of-Work : calcul cryptographique (faible empreinte carbone)
  • Mode invisible : détecte les bots sans interaction utilisateur
  • Token-based : API REST pour intégration custom

Différence avec reCAPTCHA/hCaptcha : Cap ne vend pas vos données utilisateurs, ne dépend d'aucune API tierce et est gratuit à l'infini.

Cas d'usage :

  • Formulaires de contact, login, inscription
  • Protection contre le spam de commentaires
  • Bot protection pour API
  • Sites RGPD-strict (UE, données sensibles)
  • Auto-hébergement éthique

🚀 Installation

Via Docker Compose (recommandé)

# docker-compose.yml
version: '3.8'
services:
  cap:
    image: tiagostudio/cap:latest
    container_name: cap
    restart: unless-stopped
    environment:
      - PORT=3000
      - CAP_ADMIN_PASSWORD=***      - CAP_ALLOWED_ORIGINS=https://example.com,https://app.example.com
    volumes:
      - cap-data:/app/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.cap.rule=Host(`cap.example.com`)"
      - "traefik.http.routers.cap.entrypoints=websecure"
      - "traefik.http.services.cap.loadbalancer.server.port=3000"
    networks:
      - proxy

volumes:
  cap-data:

networks:
  proxy:
    external: true

Standalone (Node.js)

git clone https://github.com/tiagostudio/cap.git
cd cap
npm install
CAP_ADMIN_PASSWORD=*** npm start

Intégration côté client (HTML)

<script src="https://cap.example.com/cap.js"></script>

<cap-widget
  data-cap-api-endpoint="https://cap.example.com/"
  data-cap-hidden-field-name="cap-token"
></cap-widget>

<form>
  <input type="text" name="email" />
  <cap-widget ...></cap-widget>
  <button type="submit">S'inscrire</button>
</form>

⚙️ Configuration

  1. CORS : CAP_ALLOWED_ORIGINS doit lister tous les domaines clients
  2. Admin : CAP_ADMIN_PASSWORD pour accéder au dashboard
  3. Challenges : configurer le niveau de difficulté dans config.toml
  4. Mode invisible : score-based, vérification silencieuse
  5. Persistence : fichier SQLite par défaut (Docker volume)
  6. Rate limiting : nombre de challenges par IP (anti-bruteforce)

🔗 Alternatives

  • hCaptcha (freemium) — Bonne alternative, mais envoie des données à Intuition Machines
  • Google reCAPTCHA v3 — Gratuit mais tracking Google massif
  • Cloudflare Turnstile — Excellent, gratuit, mais lié à Cloudflare
  • Friendly Captcha — Open source partial, proof-of-work, allemand
  • mCaptcha — Open source, PoW, indirection intéressante
  • Anubis (Proof-of-Work, libre) — Focus protection de pages

🔒 Sécurité

  • HTTPS obligatoire : le widget ne doit pas être servi en HTTP
  • CORS strict : ne jamais mettre * (l'origine du challenge doit être vérifiée)
  • Token TTL : tokens à durée limitée (5-15 min)
  • Rate limiting : limiter les challenges par IP/empreinte
  • Logs : attention à ne pas logger les challenges (anti-replay)
  • Admin password : à stocker en secret (Docker secret ou .env)
  • Audit : dashboard admin pour voir les abus

📚 Ressources

🔗 Pages Liées