Die ausführliche Fallstudie ist auf Spanisch verfügbar.
Logros
- Cuatro fallos de seguridad de la versión inicial, corregidos
- API REST con sesión, token CSRF y validación en servidor
- 24 pruebas unitarias y 39 pruebas HTTP de extremo a extremo
- Publicada en mi servidor Apache con un script de despliegue verificado
Contexto
El reto de BlinkLearning pedía una aplicación de tareas con login. La primera versión funcionaba en local, pero al revisarla para publicarla en internet comprobé que no era segura: la API aceptaba escrituras sin sesión, una tarea con código HTML se ejecutaba en el navegador de quien la viera, y el archivo de usuarios y el log (que guardaba la contraseña) se podían descargar por URL.
Mi rol
Desarrollé las dos versiones yo solo, del backend al despliegue. En la segunda usé Claude como asistente para la auditoría y las pruebas; las decisiones de arquitectura y la publicación en el servidor son mías.
Qué construí
Backend en PHP
API REST con los verbos GET, POST, PATCH, PUT y DELETE, respuestas JSON con códigos HTTP correctos y validación de longitud, tipo y codificación. El almacenamiento está detrás de una interfaz: hoy usa la sesión, para que cada visitante tenga sus propias tareas, y pasar a MySQL solo exige otra implementación.
Seguridad
Contraseñas con password_hash, sesión regenerada al entrar y limitada a la ruta de la app, token CSRF en todas las escrituras, Content-Security-Policy estricta y salida siempre escapada. El código y la configuración quedan fuera de la carpeta pública.
Interfaz en jQuery
Lista con detalle lateral, edición, tareas hechas, reordenación arrastrando con jQuery UI y avisos de error claros. Adaptada a móvil y usable con teclado. Sin peticiones a terceros: fuentes, iconos y librerías van incluidas.
Despliegue
- Pruebas unitarias → respaldo → copia en solo lectura → Alias de Apache con configtest → 39 pruebas HTTP contra el servidor real
Resultado
- Demo pública en patrickjoel.com/todo-app con cuenta de prueba
- Imágenes reducidas de unos 2,8 MB a menos de 400 KB
- Integración continua en GitHub Actions con PHP 8.0 y 8.3
Qué demuestra
- Desarrollo backend en PHP sin framework, con API REST y sesiones
- Criterio de seguridad web: XSS, CSRF, exposición de archivos y contraseñas
- Revisión crítica de código propio antes de publicarlo
- Despliegue y configuración de Apache en un servidor Linux propio
Nota
Es un proyecto deliberadamente pequeño: muestra cómo trabajo, no el tamaño de la aplicación.