Loading...
Loading...
Your server is shouting its exact version number to the world (e.g., "nginx/1.18.0").
Automated scanners look for outdated versions. "Oh, nginx/1.18.0? That has CVE-2021-23017." It paints a target on your back. It doesn't cause the hack, but it invites it.
Obscurity is not security, but there is no benefit to broadcasting your software stack. In Nginx, `server_tokens off` removes the version. In Next.js, disabling `poweredByHeader` removes the "X-Powered-By: Next.js" header.
Look for any response header that names the software stack: `Server`, `X-Powered-By`, `X-AspNet-Version`, `X-Generator`, `Via`. Also check HTML meta generator tags and default error pages, which often show framework branding.
curl -sI https://yourdomain.comcurl -sI https://yourdomain.com | grep -iE "^(server|x-powered-by|x-aspnet|x-generator|via):"curl -s https://yourdomain.com/does-not-exist-xyz | grep -iE "nginx|apache|express|php|tomcat"Partly. Hiding versions does not stop a targeted attacker but it does filter out the noise from automated scanners probing for specific CVEs. The real control is patching; hiding versions is a small complement that costs nothing.
Always remove it. It never provides value and advertises your framework. Next.js: `poweredByHeader: false`. Express: `app.disable('x-powered-by')`. PHP: `expose_php = Off` in php.ini.
Removing the version is enough for compliance scanners. Some teams replace `Server` with a generic label for brand consistency; most just turn off version disclosure and move on.
Applied the configuration change? Run a live scan to confirm the vulnerability is patched.