Cómo funciona esta comprobación
Scanaris pide /.well-known/security.txt, que es la ruta estándar del RFC 9116, y si no la encuentra prueba /security.txt en la raíz, que es la ubicación antigua. Da el archivo por presente solo si responde 200 y contiene una línea que empieza por Contact:, el único campo obligatorio junto con Expires. Así descarta las aplicaciones de una sola página que devuelven su HTML para cualquier ruta. Si no lo encuentra, abre un hallazgo de severidad informativa: no resta puntos a tu nota, porque no tenerlo no es un fallo de seguridad; es una buena práctica que te falta.
Para qué sirve
Cuando alguien encuentra un fallo en tu web (un investigador, un usuario curioso, otra empresa), necesita saber a quién avisar. Sin una vía clara, lo normal es que no avise, que lo publique, o que escriba al formulario de contacto genérico y nadie lo lea. security.txt es un archivo de texto en una ruta conocida donde dices "escríbeme aquí, en este idioma, y esta es mi política". Lo leen personas y herramientas, y cada vez más programas de recompensas y aseguradoras lo dan por supuesto. También te protege a ti: deja claro que aceptas reportes responsables y bajo qué condiciones.
Cómo crearlo
Un archivo mínimo válido:
Contact: mailto:security@tudominio.com
Expires: 2027-10-01T00:00:00.000Z
Preferred-Languages: es, en
Canonical: https://tudominio.com/.well-known/security.txt
- Contact (obligatorio): un
mailto:, una URL de formulario o untel:. Puedes poner varios, en orden de preferencia. El buzón tiene que existir y leerse. - Expires (obligatorio): fecha en formato ISO 8601 a partir de la cual el archivo deja de ser válido. El RFC recomienda menos de un año: ponte un recordatorio para renovarlo.
- Preferred-Languages, Policy (URL de tu política de divulgación), Encryption (tu clave PGP) y Acknowledgments (página de agradecimientos) son opcionales.
- Canonical indica la URL oficial del archivo; útil si firmas el archivo con PGP para que nadie pueda publicar uno falso.
Dónde ponerlo
- Nuxt, Next.js, Vite, Astro: crea
public/.well-known/security.txt; se sirve tal cual. Comprueba que el.gitignoreno ignore carpetas que empiecen por punto. - Vercel y Netlify: lo mismo, dentro de la carpeta pública del proyecto.
- nginx o Apache: un archivo en
/.well-known/security.txtdel directorio servido; si tu aplicación captura todas las rutas, añade una excepción para/.well-known/. - WordPress: sube el archivo por FTP a
.well-known/en la raíz, o usa un plugin que lo genere.
Sírvelo como text/plain y en HTTPS. Si tienes muchos dominios, cada uno debe tener el suyo o redirigir al canónico.
Comprueba que está arreglado
curl -si https://tudominio.com/.well-known/security.txt | grep -iE "^(HTTP|content-type|contact|expires)"
Esperado: 200, tipo text/plain, una línea Contact: y una Expires: con fecha futura.
Preguntas frecuentes
¿Me van a llegar más correos de spam o de "cazarrecompensas"?
Algo de correo de baja calidad llegará; es el precio de ser localizable. Un filtro sencillo y una política clara (qué cuenta como reporte válido, si pagas o no) reducen el ruido. Lo que te ahorra es la alternativa: enterarte por Twitter.
¿Puedo poner solo el formulario de contacto general?
Puedes, pero es mejor un buzón dedicado que alguien revise. Si el formulario general lo lee marketing, un aviso de vulnerabilidad puede tardar semanas en llegar a quien toca.
¿Por qué no penaliza la nota?
Porque mide preparación, no exposición. El resto de comprobaciones de seguridad, las que sí pesan, están en la checklist de seguridad antes de lanzar.