Info disclosure x powered by
Quick winRemove or mask the X-Powered-By HTTP response header to stop advertising your server technology stack to attackers.
What it is
Every time someone visits your store, your web server sends back a set of "headers" — invisible metadata that browsers and tools can read. One of these, X-Powered-By, often announces exactly what software is running your site (e.g., "WP Engine", "PHP/8.1", "Express"). This header serves no useful purpose for your customers but acts like a neon sign telling attackers which known vulnerabilities to target. Removing or masking it is a simple hardening step that reduces your visible attack surface.
Why it matters
Attackers routinely scan millions of sites for this header and then cross-reference the disclosed technology with published CVE vulnerability databases — meaning an exposed X-Powered-By header can make your store a faster, easier target for automated exploits. While removing it doesn't fix underlying vulnerabilities, it raises the effort required to fingerprint your stack and is a baseline expectation in security audits and PCI-DSS compliance reviews. Failing this check can flag your store in penetration tests, risk assessments, and payment-processor security questionnaires, potentially affecting your ability to process cards. It is specifically called out under OWASP A05:2021 – Security Misconfiguration as an information-disclosure risk.
How to fix it
- Audit your current headers by visiting your site URL in a tool like https://securityheaders.com or using browser DevTools (Network tab → click any request → inspect Response Headers) to confirm the X-Powered-By header is present.
- Identify where the header is being set: it may come from your hosting platform/CDN, your web server (Apache/Nginx), a PHP runtime, or a Node.js framework — sometimes multiple layers send it.
- Remove or suppress the header at the highest relevant layer (hosting control panel, server config, or application code) — see platform-specific steps below.
- If you cannot fully remove it (e.g., a managed host sets it), replace its value with a generic or empty string so it reveals nothing meaningful.
- Re-test with DevTools or securityheaders.com to confirm the header no longer appears (or now shows a non-informative value) in server responses.
- Repeat the check after any platform upgrade or plugin update, as updates can re-introduce the header.
# Nginx — strip X-Powered-By in server block
more_clear_headers 'X-Powered-By';
# Apache .htaccess — unset header
Header unset X-Powered-By
# PHP — suppress PHP version header
expose_php = Off # php.ini
header_remove('X-Powered-By'); # PHP code
# Next.js — next.config.js
module.exports = {
poweredByHeader: false,
};Fix it on your platform
Pick your platform for the exact steps.
How to fix info disclosure x powered by on Shopify
- Shopify's infrastructure automatically manages all HTTP response headers — store owners cannot directly modify server-level headers like X-Powered-By from the Shopify admin.
- Shopify does not expose X-Powered-By with sensitive stack information on standard storefronts; if a scanner flags this, verify whether it is coming from a third-party app, a custom Hydrogen/Oxygen headless front-end, or a connected external service.
- For Hydrogen (headless) storefronts deployed on Oxygen: open your Hydrogen project, locate server middleware or the entry server file, and add a response-header removal step (e.g., `response.headers.delete('x-powered-by')`) before sending the response.
- For third-party apps injecting the header, contact the app developer or disable the app if it poses a risk.
How to fix info disclosure x powered by on Shopify Plus
- Same as Shopify above. Shopify Plus merchants with custom Hydrogen storefronts on Oxygen should remove the header in their server middleware as described.
- If using a custom external front-end (e.g., Next.js on Vercel), apply the fix at the Next.js/Vercel layer — add `{ key: 'X-Powered-By', value: '' }` removal in next.config.js headers config, or use Vercel's Headers settings in the project dashboard under Settings → Headers.
How to fix info disclosure x powered by on WooCommerce
- WooCommerce runs on WordPress + PHP, so the header typically comes from PHP or your host. The fix lives in your server config or a plugin.
- Option A — Plugin (no code): Install the free 'HTTP Headers' plugin (by Dimitar Ivanov) or 'Security Headers' plugin. In WordPress Admin → HTTP Headers (or Security Headers), find the X-Powered-By entry and set it to remove/suppress.
- Option B — PHP (wp-config.php or functions.php): Add `header_remove('X-Powered-By');` near the top of wp-config.php, or inside a must-use plugin file in /wp-content/mu-plugins/.
- Option C — Nginx server block: Add `more_clear_headers 'X-Powered-By';` (requires headers-more module) or handle it via your host's control panel (cPanel → Apache/Nginx configuration).
- Option D — Apache .htaccess: Add `Header unset X-Powered-By` (requires mod_headers). Place this in your root .htaccess file above the WordPress rewrite block.
- Verify with browser DevTools → Network tab after saving.
How to fix info disclosure x powered by on WordPress.org
- Same stack as WooCommerce. Add `header_remove('X-Powered-By');` to wp-config.php, or use the 'HTTP Headers' or 'Solid Security' (formerly iThemes Security) plugin to suppress the header from the WordPress admin.
- In Solid Security: Admin → Solid Security → Settings → Server Config Tweaks — enable 'Remove File Writing Permissions' and review server header options.
- For Nginx hosting, work with your host to add `more_clear_headers 'X-Powered-By';` in the server block. For Apache, add `Header unset X-Powered-By` to .htaccess.
How to fix info disclosure x powered by on BigCommerce
- BigCommerce is a fully managed SaaS platform; core HTTP response headers are controlled by BigCommerce's infrastructure and cannot be changed from the merchant admin.
- If X-Powered-By is flagged on a BigCommerce storefront, raise a support ticket with BigCommerce to request header suppression, or note it as a platform-level finding outside merchant control.
- If you use a custom headless front-end (e.g., Next.js via BigCommerce's headless channel), remove the header there: in next.config.js add a `headers()` async function returning `{ source: '/(.*)', headers: [{ key: 'X-Powered-By', value: '' }] }` and set `poweredByHeader: false`.
How to fix info disclosure x powered by on Adobe Commerce (Magento)
- For Nginx: Edit your Magento Nginx server block config (typically at /etc/nginx/sites-available/magento or your server's vhost file). Add `more_clear_headers 'X-Powered-By';` inside the `server {}` block, then run `nginx -t && systemctl reload nginx`.
- For Apache: Open or create a .htaccess in your Magento web root. Add `Header unset X-Powered-By` (mod_headers must be enabled). Alternatively, set it in your VirtualHost config.
- For PHP-FPM: Edit php.ini (or a pool .conf file) and set `expose_php = Off` — this prevents PHP from adding its own X-Powered-By value.
- For Adobe Commerce Cloud (cloud.adobe.com): Add a custom Fastly VCL snippet via Admin → Stores → Configuration → Advanced → System → Full-Page Cache → Fastly Configuration → Custom VCL Snippets, with a `vcl_deliver` subroutine that calls `unset resp.http.X-Powered-By;`.
- Verify with: `curl -I https://yourstore.com | grep -i powered`
How to fix info disclosure x powered by on Magento Open Source
- Follow the same Nginx/Apache/.htaccess and PHP expose_php steps as Adobe Commerce above.
- For shared hosting with cPanel: Go to cPanel → Software → MultiPHP INI Editor, select your PHP version, and set expose_php to Off.
How to fix info disclosure x powered by on Wix
- Wix is a fully managed SaaS platform; HTTP response headers are set by Wix's infrastructure and cannot be changed from the site owner's dashboard.
- If a scanner flags X-Powered-By on a Wix site, this is a platform-level concern. Contact Wix Support to report it or note it as outside merchant control.
- If you use Wix Velo (custom backend code) with external APIs, ensure those API endpoints are hosted elsewhere with headers properly suppressed.
How to fix info disclosure x powered by on Wix Studio
- Same as Wix above — Wix Studio sites run on Wix's managed infrastructure. HTTP headers cannot be configured by the site owner.
- For Wix Studio sites using Velo backend functions that proxy to external services, suppress X-Powered-By at the external service layer.
How to fix info disclosure x powered by on Squarespace
- Squarespace is a fully managed SaaS platform; HTTP headers are controlled by Squarespace's infrastructure and cannot be modified by the site owner.
- If flagged, note this as a platform-level finding. Contact Squarespace Support to report the concern.
- If you have connected a custom external back-end or API, suppress the header at that service's server or CDN level.
How to fix info disclosure x powered by on Webflow
- Webflow-hosted sites run on Webflow's managed CDN; site owners cannot configure raw HTTP response headers from the Webflow Designer or Editor.
- If you use Webflow's Logic or connect external services/webhooks, ensure those external endpoints suppress X-Powered-By at their own server or CDN layer.
- For sites exported from Webflow and self-hosted: configure header removal in your own web server (Nginx/Apache) or CDN (Cloudflare) as described in the generic steps.
How to fix info disclosure x powered by on PrestaShop
- For Apache hosting: Add `Header unset X-Powered-By` to your PrestaShop root .htaccess file (mod_headers must be active).
- For Nginx hosting: Add `more_clear_headers 'X-Powered-By';` to the server block in your vhost config, then reload Nginx.
- In php.ini (or .user.ini in your web root): Set `expose_php = Off` to prevent PHP from emitting its version in this header.
- Alternatively, add `header_remove('X-Powered-By');` in /config/defines.inc.php or a custom override module.
How to fix info disclosure x powered by on OpenCart
- Add `header_remove('X-Powered-By');` in OpenCart's index.php entry file (root of your installation) near the top, after the opening PHP tag.
- For Apache: Add `Header unset X-Powered-By` to your .htaccess file.
- For Nginx: Add `more_clear_headers 'X-Powered-By';` to your server block config.
- Set `expose_php = Off` in php.ini to stop PHP from injecting its version string.
How to fix info disclosure x powered by on Next.js
- In next.config.js, set `poweredByHeader: false` at the root of the exported config object — this removes the 'X-Powered-By: Next.js' header automatically.
- To also remove headers set by the underlying Node/hosting layer, add an async `headers()` function in next.config.js returning a rule for all routes: `{ source: '/(.*)', headers: [{ key: 'X-Powered-By', value: '' }] }` — though setting to empty string is less effective than removal; prefer the poweredByHeader: false flag.
- If deploying on Vercel: Go to Vercel Dashboard → your project → Settings → Headers, and add a rule to remove X-Powered-By for all paths.
- Redeploy and verify with `curl -I https://yoursite.com | grep -i powered`.
How to fix info disclosure x powered by on Nuxt.js
- In nuxt.config.ts/js, add a `routeRules` or `serverHandlers` entry, or use the `nitro.headers` config to remove the header: under `nitro: { routeRules: { '/**': { headers: { 'x-powered-by': '' } } } }`.
- For Nuxt 2 with Express server middleware: Add `app.disable('x-powered-by')` in your serverMiddleware.
- For deployments on a Node server, set `X_POWERED_BY=false` as an env var if supported, or apply an Nginx/Caddy reverse-proxy rule to strip the header before it reaches clients.
- Verify with browser DevTools or curl after deployment.
How to fix info disclosure x powered by on Drupal
- In your sites/default/settings.php or a custom module's hook_boot(), call `header_remove('X-Powered-By');` or use `drupal_add_http_header('X-Powered-By', '');`
- Install the 'Security Kit' (seckit) module from drupal.org: Admin → Configuration → System → Security Kit — it provides options to strip information-disclosure headers.
- For Apache: Add `Header unset X-Powered-By` to your .htaccess or VirtualHost config.
- For Nginx: Add `more_clear_headers 'X-Powered-By';` to the server block.
How to fix info disclosure x powered by on Ghost
- Ghost runs on Node.js/Express. In your Ghost installation's config.production.json or a custom Express middleware file, you can add app-level header removal.
- The most reliable approach for self-hosted Ghost is to configure your Nginx reverse proxy (the recommended Ghost setup uses Nginx in front): add `more_clear_headers 'X-Powered-By';` inside the `server {}` block of your Ghost Nginx config (usually at /etc/nginx/sites-available/your-ghost-site), then reload Nginx.
- For Ghost(Pro) managed hosting: this is outside owner control; contact Ghost support if flagged.
How to fix info disclosure x powered by on Cloudflare (as CDN/proxy — applicable to any platform above)
- If your store's traffic passes through Cloudflare, you can strip the X-Powered-By header using a Cloudflare Transform Rule. Go to Cloudflare Dashboard → your domain → Rules → Transform Rules → Modify Response Header.
- Click 'Create rule', set Field = 'X-Powered-By', Operation = 'Remove', apply to all incoming requests, and save.
- This works regardless of your underlying platform and provides a network-level safety net.
Does your site have this issue?
Run a free SEOLZ audit to find info disclosure x powered by — and every other issue — across your whole site in minutes.
Scan my site freeFrequently asked questions
What is Info disclosure x powered by?
Every time someone visits your store, your web server sends back a set of "headers" — invisible metadata that browsers and tools can read. One of these, X-Powered-By, often announces exactly what software is running your site (e.g., "WP Engine", "PHP/8.1", "Express"). This header serves no useful purpose for your customers but acts like a neon sign telling attackers which known vulnerabilities to target. Removing or masking it is a simple hardening step that reduces your visible attack surface.
Why does info disclosure x powered by matter?
Attackers routinely scan millions of sites for this header and then cross-reference the disclosed technology with published CVE vulnerability databases — meaning an exposed X-Powered-By header can make your store a faster, easier target for automated exploits. While removing it doesn't fix underlying vulnerabilities, it raises the effort required to fingerprint your stack and is a baseline expectation in security audits and PCI-DSS compliance reviews. Failing this check can flag your store in penetration tests, risk assessments, and payment-processor security questionnaires, potentially affecting your ability to process cards. It is specifically called out under OWASP A05:2021 – Security Misconfiguration as an information-disclosure risk.
How do I fix info disclosure x powered by?
Remove or mask the X-Powered-By HTTP response header to stop advertising your server technology stack to attackers.
Authoritative references
- OWASP Top Ten — OWASP
- OWASP Cheat Sheet Series — OWASP
- Secure Headers Project — OWASP