andexer / captcha
Captcha numérico de imagen para PHP 8.2+, sin dependencias de runtime más allá de ext-gd
Requires
- php: >=8.2
- ext-gd: *
Requires (Dev)
- ext-dom: *
- ext-mbstring: *
- ext-xml: *
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^2.2
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-08 17:05:47 UTC
README
Captcha numérico de imagen para PHP 8.2+, sin ninguna dependencia de runtime más allá de ext-gd. Genera retos de dígitos (o de operaciones aritméticas), los dibuja como PNG con GD, los guarda en sesión o en archivos y los verifica en el servidor con uso único y a prueba de repetición.
composer require andexer/captcha
Repositorio: github.com/andexer/captcha · CHANGELOG · Política de seguridad
Todo visible al usuario — mensajes de verificación, errores, la consola y la interfaz del widget — está en español. El código interno y la API pública están en inglés (estándar de librerías PHP), pero los strings de feedback listos para mostrar son siempre en español.
Características
| Área | Qué obtienes |
|---|---|
| Cero dependencias | Solo PHP >= 8.2 y ext-gd. Sin servicios externos ni sesiones ajenas. |
| Widget listo para usar | Imagen + campo + botón de recarga con CSS/JS empaquetados, inyectados inline (CSP estricta). |
| Dos llamadas y listo | Captcha::widget() en el formulario y Captcha::check() en el POST. Config opcional. |
| Captcha matemático | El reto puede ser a + b, a − b, a × b o a ÷ b; el usuario teclea el resultado. |
| Anti-spam de verdad | Rate limit dual por IP + sesión activo por defecto, fail-closed, honeypot opcional. |
| Uso único garantizado | Verificación atómica y comparación timing-safe con hash_equals(). |
Detalle completo en Características.
Requisitos
- PHP >= 8.2,
ext-gdcon soporte PNG y Composer 2.
php -m | grep -i gd
Instalación
composer require andexer/captcha vendor/bin/captcha install # crea app/Config/captcha.php (plantilla comentada; opcional) vendor/bin/captcha doctor # comprueba PHP, GD, config descubierto y endpoint
install nunca sobrescribe un archivo existente. Eso es todo: instalación completa = composer require + (opcional) un archivo .php de configuración.
Versión actual: candidata de publicación. Lo publicado ahora es
1.0.0-rc.6(pre-release): Composer no la ofrece sin pedir la estabilidad, así que hay que nombrarla:composer require andexer/captcha:1.0.0-rc.6. En producción, espera av1.0.0y usa^1.0.
Inicio rápido
Un formulario con captcha en dos llamadas y un archivo de configuración opcional:
<?php // controlador.php require 'vendor/autoload.php'; use Captcha\Captcha; // 1) Backend: ¿llegó un POST? ¿pasó? Feedback en español. $check = Captcha::check(); try { $widget = Captcha::widget(); } catch (\Captcha\Exception\RateLimitException $e) { $error = $e->getMessage(); } ?> <!DOCTYPE html> <html lang="es"> <body> <?php if ($check->error !== null): ?> <p class="bad"><?= htmlspecialchars($check->error, ENT_QUOTES) ?></p> <?php elseif ($check->passed): ?> <p class="ok">Código captcha correcto.</p> <?php else: ?> <form method="post"> <?= $widget ?> <!-- 2) Frontend: imagen + campo + recarga --> <p><button type="submit">Enviar</button></p> </form> <?php endif; ?> </body> </html>
widget() inyecta el CSS/JS empaquetados la primera vez, así que no hay nada que servir: tu docroot ni se entera.
Documentación
| Documento | Contenido |
|---|---|
| Características | Tabla detallada, flujo completo del reto y reglas de seguridad. |
| Tipos de captcha | Dígitos, modo aritmético, between, tipografía GD. |
| Configuración | Descubrimiento, presets, tabla completa de opciones, Config, validaciones. |
| API | Métodos públicos, widget, endpoint AJAX, almacenamiento, excepciones, contratos. |
| Seguridad | Rate limiting, proxies de confianza, honeypot, endurecimiento, CaptchaGuard. |
| Integración | PHP plano, CodeIgniter, Laravel, Symfony, CakePHP, Yii, Yii 3 y Janssen. |
| Consola | install, doctor, alias, dry-run, códigos de salida. |
| Desarrollo | Puesta en marcha, publicar versiones, ejemplos, limitaciones, arquitectura. |
Licencia
MIT. Úsalo, estúdialo y modifícalo libremente. El texto completo está en LICENSE.