Security Header Scanner & Quick Assessment Tool
Herramienta de auditoría pasiva de seguridad web que analiza los headers HTTP de respuesta de cualquier URL pública, genera un puntaje de seguridad (0-100), identifica headers faltantes o mal configurados, y mapea los resultados contra OWASP Top 10 y Directiva NIS2. Incluye verificación TLS/SSL, DNS (SPF/DKIM/DMARC), archivos de seguridad (RFC 9116), SRI, fingerprinting tecnológico con base de datos de CVEs y exportación PDF/JSON.
- NestJS 11
- React 19
- TypeScript 5
- Vite 8
- Node.js 22
- Swagger/OpenAPI
Mi rol
Full-stack / Cybersecurity
Impacto
Proyecto de master en ciberseguridad que implementa un escáner pasivo de 15 headers de seguridad con scoring ponderado, verificaciones TLS/DNS nativas, mapeo OWASP+NIS2 y detección de CVEs. 83 tests unitarios, 19 suites, y exportación profesional a PDF con pdfkit.
Reto
Desarrollar una herramienta de auditoría de seguridad web pasiva que analizara 15 headers de seguridad HTTP (CSP, HSTS, XFO, CORS, etc.), verificara TLS/SSL mediante conexión raw, consultara registros DNS de seguridad (SPF, DKIM, DMARC), escaneara archivos sensibles y de seguridad (security.txt RFC 9116, robots.txt), verificara integridad de recursos SRI, realizara fingerprinting tecnológico con detección de 25 CVEs conocidos, y generara reportes exportables en PDF y JSON. Todo mapeado contra marcos normativos OWASP Top 10 2021 y Directiva NIS2 2023.
Solución
Backend NestJS 11 modular con 4 módulos funcionales (Scanner, Analyzer, Compliance, Report) comunicados mediante inyección de dependencias. 15 checkers individuales implementando la interfaz HeaderChecker con scoring ponderado por severidad (critical=25, high=15, medium=10, low=5). TLS checker con conexión raw vía tls.connect() de Node.js para extraer versión del protocolo y certificado completo. DNS checker mediante dns/promises nativo para SPF/DKIM/DMARC. Escaneo paralelo con Promise.all para minimizar latencia. Frontend React 19 + Vite 8 con ScoreCircle SVG animado, grilla de headers con barras de progreso, secciones de compliance, TLS/DNS, SRI y fingerprinting, más botones de exportación JSON/PDF.
Arquitectura
NestJS 11 (TypeScript) + React 19 + Vite 8 + Axios + class-validator + Swagger/OpenAPI + pdfkit. Arquitectura modular con ScannerController como entry point, ScannerService como orquestador que ejecuta 6 verificaciones en paralelo tras la peticion HTTP inicial (TLS, DNS, security files, sensitive files, SRI, fingerprinting) via Promise.all. AnalyzerService con 15 checkers implementando HeaderChecker interface y ScoreCalculator para scoring ponderado (max 165pts). ComplianceService con mappers para OWASP Top 10, NIS2, ENS e ISO 27001. ReportService genera JSON final con recomendaciones priorizadas por severidad. ExportService genera PDF profesional con pdfkit. Frontend React 19 con estados: inicial, carga (spinner + barra de progreso), éxito (fade-in con ScoreCircle animado, grilla 3 columnas de headers, compliance lateral, TLS/DNS, security files, SRI, fingerprinting + tabla de CVEs, recomendaciones en 4 columnas por severidad) y error (banner rojo). Proxy Vite /api -> NestJS :3000.
Arquitectura de módulos
Fragmentos de código
// @ts-nocheck - Display-only code example
// Ejemplo de la arquitectura de checkers en NestJS - HeaderChecker interface + ScoreCalculator
// Patron de diseno: Strategy con 15 implementaciones de HeaderChecker
// --- Common Module: Interfaces compartidas ---
export type HeaderSeverity = 'critical' | 'high' | 'medium' | 'low';
export interface HeaderResult {
header: string;
present: boolean;
value: string | null;
grade: number;
severity: HeaderSeverity;
weight: number;
finding: string;
recommendation: string;
}
export interface HeaderChecker {
name: string;
severity: HeaderSeverity;
weight: number;
analyze(value: string | undefined): HeaderResult;