Cómo funciona esta comprobación
Scanaris lee las cabeceras de la respuesta principal de tu página y mira dos en concreto. Si existe X-Powered-By con cualquier valor (por ejemplo Express, PHP/8.2.12 o Next.js), abre un hallazgo de severidad baja. Si existe Server y su valor contiene un número de versión (algo como nginx/1.18.0 o Apache/2.4.57), abre otro. Un Server: nginx o Server: cloudflare a secas no se marca: decir qué servidor usas no es un problema; decir qué versión exacta, sí.
Por qué importa
Ninguna de estas dos cabeceras aporta nada al usuario ni al navegador. Existen por costumbre. Lo que sí hacen es ahorrarle trabajo a quien busca una vulnerabilidad: con PHP/7.4.3 o Apache/2.4.49 en la respuesta, el atacante no tiene que adivinar nada, va directo a la lista de fallos conocidos de esa versión y prueba los que tengan exploit público. Es un hallazgo de severidad baja porque por sí solo no abre ninguna puerta; pero es de los más fáciles de cerrar, y los escáneres masivos filtran sus objetivos exactamente por estas cabeceras.
Cómo quitarlas según tu stack
- Express:
app.disable('x-powered-by')al crear la app, o usahelmet(), que la quita junto con otras mejoras. - Next.js: envía
X-Powered-By: Next.jspor defecto. Ennext.config.js,poweredByHeader: false. - PHP: en
php.ini,expose_php = Off. En hosting compartido suele poder cambiarse desde el panel o con un.user.ini. - ASP.NET: en
web.config, dentro decustomHeaders,<remove name="X-Powered-By" />, y en IIS desactiva también la cabeceraX-AspNet-VersionconenableVersionHeader="false". - nginx:
server_tokens off;en el bloquehttp. Sigue diciendo "nginx", pero sin versión. - Apache:
ServerTokens ProdyServerSignature Offen la configuración principal. ConProdla cabecera queda enApachea secas. - Vercel, Netlify, Cloudflare Pages: no envían versión en
Server. Si vesX-Powered-Byahí, viene de tu framework (Next.js o Express), no de la plataforma.
Si tienes un proxy o CDN delante (Cloudflare, un balanceador), comprueba la respuesta pública: a veces el proxy sustituye la cabecera Server y el problema desaparece solo, pero X-Powered-By suele pasar intacta.
Comprueba que está arreglado
curl -sI https://tudominio.com | grep -iE "^(server|x-powered-by):"
Lo ideal es que no salga X-Powered-By y que Server, si aparece, no lleve número. Prueba también una ruta de la API o una página de error (una URL que no exista): los errores a veces se generan en otra capa y vuelven a añadir la cabecera.
Preguntas frecuentes
Ocultar la versión no arregla la vulnerabilidad. ¿Para qué sirve?
Para no estar en la primera página de resultados de quien busca víctimas. Tienes razón en que la solución de fondo es actualizar: ocultar la versión es el complemento, no el sustituto. Las dos cosas juntas cuestan cinco minutos.
Mi hosting no me deja tocar la configuración del servidor.
En ese caso, elimina al menos X-Powered-By desde tu código o tu .htaccess (Header unset X-Powered-By) y pide al hosting que oculte la versión. Las otras cabeceras de seguridad, las que sí deberías tener, las repasa la comprobación de cabeceras de seguridad.
¿Por qué no se marca "Server: cloudflare"?
Porque no revela nada aprovechable: ni versión ni software concreto detrás. Lo que se busca aquí es información que acorte el camino a un exploit. Qué cabeceras conviene tener y cuáles sobran lo cuenta cabeceras HTTP explicadas para humanos.