Detectar automáticamente cuando la seguridad de un sitio se degrada
Un pequeño robot que revisa mis sitios web cada 30 minutos y señala cualquier ajuste de seguridad que haya desaparecido sin hacer ruido.
La necesidad
Un ajuste de seguridad eliminado por error durante una actualización es invisible… hasta que lo detecta una auditoría o un cliente.
La idea
No depender de acordarse de comprobar. Hacer que la comprobación se ejecute sola, al margen de lo que vigila, para que una avería nunca pueda ocultar otra.
Lo que construí
- Un verificador de las protecciones estándar que debe enviar un sitio web: cinco cabeceras de seguridad, el paso a HTTPS, los ajustes de las cookies y la caducidad del certificado, con un aviso tres semanas antes.
- Se ejecuta con su propio calendario, fuera de los sitios web, y guarda su historial en su propia base de datos.
- Un panel privado, detrás de una puerta de autenticación.
El resultado
- 30 minentre dos comprobaciones
- 5cabeceras de seguridad verificadas en cada pasada
- 3 semanasde aviso antes de que caduque un certificado
- 30 ago. 2026en servicio desde
En su primera pasada encontró una cabecera que revelaba la versión del framework utilizado, corregida en menos de una hora. Después detectó su propio error: su primer panel era público y figuraba en el mapa del sitio, en la práctica un mapa para atacantes. Se cerró ese mismo día y se volvió a abrir detrás de una autenticación.
En imágenes
Lo que aprendí
Una herramienta de seguridad debe superar primero su propia prueba. Una herramienta de vigilancia que muestra públicamente lo que vigila se convierte en una herramienta de reconocimiento para cualquiera que la encuentre.
Detalles técnicos Tecnologías, arquitectura y decisiones, para lectores técnicos
Tecnologías
- Node.js (sin dependencias npm)
- Express
- SQLite (node:sqlite)
- Temporizador systemd
- Cloudflare Access
Cómo funciona
- Comprobaciones: presencia de CSP, HSTS, X-Frame-Options, X-Content-Type-Options y Referrer-Policy; ninguna fuga en Server ni en X-Powered-By; Secure y HttpOnly en todas las cookies; redirección HTTP → HTTPS; certificado TLS que no caduque en las próximas tres semanas.
- Ninguna dependencia npm: solo módulos integrados de Node.
- Desacoplado por diseño: el verificador es un servicio systemd que se lanza cada 30 minutos y escribe en su propia base SQLite; el panel solo lee esa base y nunca ejecuta una comprobación.
- Tras la exposición que se causó a sí mismo: panel retirado del mapa del sitio y de robots.txt, identificadores del servicio sacados del código fuente y reapertura únicamente detrás de Cloudflare Access, en un subdominio dedicado.
Lo que aún falta
- Panel no público, a propósito