Initial vault setup
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
---
|
||||
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](https://capjs.js.org/) |
|
||||
| **GitHub** | [tiagostudio/cap](https://github.com/tiagostudio/cap) |
|
||||
| **License** | Apache-2.0 |
|
||||
| **Langage** | TypeScript (server) + JS/TS (client) |
|
||||
| **Étoiles GitHub** | 6 776 ⭐ |
|
||||
| **Catégorie** | [[cat-development\|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é)
|
||||
|
||||
```yaml
|
||||
# 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)
|
||||
|
||||
```bash
|
||||
git clone https://github.com/tiagostudio/cap.git
|
||||
cd cap
|
||||
npm install
|
||||
CAP_ADMIN_PASSWORD=*** npm start
|
||||
```
|
||||
|
||||
### Intégration côté client (HTML)
|
||||
|
||||
```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
|
||||
|
||||
- [Documentation officielle](https://capjs.js.org/)
|
||||
- [GitHub tiagostudio/cap](https://github.com/tiagostudio/cap)
|
||||
- [Démo en ligne](https://capjs.js.org/)
|
||||
- [Pourquoi pas reCAPTCHA ?](https://capjs.js.org/#why-cap)
|
||||
|
||||
## 🔗 Pages Liées
|
||||
|
||||
- [[cat-development]] — Catégorie Development
|
||||
- [[app-traefik]] — Reverse proxy HTTPS
|
||||
- [[securisation-home-lab]] — Bonnes pratiques sécurité
|
||||
- [[recettes-docker-compose]] — Templates Docker
|
||||
- [[app-authentik]] / [[app-authelia]] — Authentification (CAPTCHA complémentaire)
|
||||
Reference in New Issue
Block a user