Dokumentacija

Skrijte različice programske opreme

Skrijte različice programske opreme

Veliko strežnikov natančno pove, kaj poganja: Server: nginx/1.18.0 (Ubuntu), X-Powered-By: PHP/7.4.33 ali oznaka <meta name="generator" content="WordPress 6.1.1"> na strani. Številka različice obiskovalcem ne koristi ničesar. Napadalcu pa je bližnjica: pove mu, katere znane ranljivosti naj preizkusi najprej, in avtomatski skenerji iščejo prav te nize.

Skrita različica stare različice ne popravi, zato redno posodabljajte. Razloga, da bi jo oglaševali, pa ni, in kontrolni seznam strani jo označi kot nekaj za preveriti.

Kje se različice pokažejo

Kje Primer Kdo jo doda
glava Server nginx/1.18.0 (Ubuntu), Apache/2.4.41 (Ubuntu) spletni strežnik
glava X-Powered-By PHP/8.3.35, Express, ASP.NET PHP, Node.js ali IIS
<meta name="generator"> v HTML-ju WordPress 6.4.2, WPML ver:4.6.9, Elementor 3.18.0, WooCommerce 8.5 CMS in njegovi vtičniki

Kontrolni seznam pokaže, katere od teh je našel. Glava, ki pove samo nginx ali Apache, brez številke, je v redu.

Preverite sami

Namesto example.com vpišite svojo stran:

curl -sI https://example.com | grep -iE '^(server|x-powered-by):'
curl -s https://example.com | grep -io '<meta name="generator"[^>]*>'

Prvi ukaz izpiše glave, drugi oznake generator. Če oba ne izpišeta ničesar ali samo ime brez različice, ste končali.

Kako popraviti

Izberite tisto, do česar imate dostop. Večina strani potrebuje dva popravka: enega za glave (strežnik ali nadzorna plošča gostovanja) in enega za oznake generator (CMS). Če imate samo dostop do administracije WordPressa, zavihek WordPress pokrije oboje, kolikor WordPress zmore.

WordPress

WordPress izpiše svojo različico, mnogi vtičniki pa še svojo (WPML, Elementor, WooCommerce, Slider Revolution, Yoast v komentarjih). Namesto da jih odstranjujete eno za drugo, odstranite vse oznake generator naenkrat.

To dodajte z brezplačnim vtičnikom Code Snippets (Snippets → Add New, izvajanje povsod) ali na konec datoteke functions.php v podrejeni temi (child theme). Ne v nadrejeno temo: posodobitev bi kodo prepisala.

// Brez različice WordPressa na strani in v virih RSS.
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');

// Vse druge oznake <meta name="generator"> (WPML, Elementor, WooCommerce …).
add_action('template_redirect', function () {
    ob_start(fn ($html) => preg_replace('/<meta\s+name=["\']generator["\'][^>]*>\s*/i', '', $html));
});

// Glava z različico PHP-ja, kjer jo pošlje PHP sam.
add_action('send_headers', fn () => header_remove('X-Powered-By'));

Nato počistite predpomnilnik strani (WP Rocket, LiteSpeed Cache, W3 Total Cache, predpomnilnik gostitelja): predpomnjena stran še vedno nosi stare oznake.

Glavo Server nastavi spletni strežnik, ne WordPress. Zanjo uporabite zavihek za vašo nadzorno ploščo gostovanja ali strežnik.

cPanel

Različica PHP-ja (X-Powered-By):

  1. Odprite Software → MultiPHP INI Editor.
  2. Preklopite v Editor Mode in izberite domeno.
  3. Dodajte ali spremenite vrstico expose_php = Off in kliknite Save.

Če je glava še vedno tam, dodajte to v datoteko .htaccess v korenski mapi strani (File Manager, z vklopljenim Show Hidden Files):

<IfModule mod_headers.c>
    Header always unset X-Powered-By
    Header unset X-Powered-By
</IfModule>

Različica spletnega strežnika (Server): pri deljenem gostovanju s cPanelom je konfiguracija strežnika v rokah gostitelja. Večina gostiteljev že pošilja samo Apache ali LiteSpeed. Če vaš kaže različico, podporo prosite, naj nastavi ServerTokens Prod; zanje je to sprememba ene vrstice.

Oznake generator pridejo iz CMS-ja: glejte zavihek WordPress.

Plesk

Različica PHP-ja (X-Powered-By): Websites & Domains → example.com → PHP Settings, v Additional configuration directives dodajte:

expose_php = Off

Različica nginxa in preostale glave: Websites & Domains → example.com → Apache & nginx Settings, v Additional nginx directives dodajte:

server_tokens off;
fastcgi_hide_header X-Powered-By;
proxy_hide_header X-Powered-By;

Kliknite OK; Plesk preveri sintakso in znova naloži nginx.

Oznake generator pridejo iz CMS-ja: glejte zavihek WordPress.

nginx

Različica strežnika: v /etc/nginx/nginx.conf, znotraj bloka http { … }:

http {
    server_tokens off;

    # PHP-FPM in aplikacije za proxyjem (Node, Python) lahko pošljejo X-Powered-By.
    fastcgi_hide_header X-Powered-By;
    proxy_hide_header X-Powered-By;
}

Različica PHP-ja: poiščite php.ini, ki ga uporablja PHP-FPM. Ukazna vrstica uporablja drugo datoteko, zato php --ini pokaže napačno. Na Debianu in Ubuntuju je to /etc/php/8.3/fpm/php.ini (vaša številka različice je lahko drugačna). Nastavite:

expose_php = Off

Preverite in uveljavite oboje:

sudo nginx -t && sudo systemctl reload nginx
sudo systemctl restart php8.3-fpm

Oznake generator pridejo iz CMS-ja: glejte zavihek WordPress.

Apache in LiteSpeed

Z dostopom do strežnika (Apache). Na Debianu in Ubuntuju uredite /etc/apache2/conf-available/security.conf, na Rocky, Alma in CentOS pa /etc/httpd/conf/httpd.conf:

ServerTokens Prod
ServerSignature Off

Nato odstranite glavo PHP-ja (potrebuje mod_headers, na Debianu in Ubuntuju: sudo a2enmod headers):

Header always unset X-Powered-By

Uveljavite spremembo:

sudo apachectl configtest && sudo systemctl reload apache2

(Na Rocky, Alma in CentOS httpd namesto apache2.)

Brez dostopa do strežnika (deljeno gostovanje, LiteSpeed). LiteSpeed bere .htaccess kot Apache in v Server običajno ne kaže različice. Da odstranite glavo PHP-ja, to dodajte v .htaccess v korenu strani:

<IfModule mod_headers.c>
    Header always unset X-Powered-By
    Header unset X-Powered-By
</IfModule>

Nastavite tudi expose_php = Off v nastavitvah PHP-ja pri gostitelju, če jih plošča ima.

Oznake generator pridejo iz CMS-ja: glejte zavihek WordPress.

Cloudflare

Če stran teče za Cloudflarom (oranžen oblak), Cloudflare glavo Server že zamenja s cloudflare. X-Powered-By z izvornega strežnika pa še vedno pride skozi. Odstranite jo lahko tudi na brezplačnem paketu:

  1. V Cloudflaru odprite domeno in pojdite na Rules → Transform Rules → Modify Response Header.
  2. Create rule, poimenujte ga Remove X-Powered-By in ga uporabite za All incoming requests.
  3. Pod Modify response header izberite Remove, ime glave X-Powered-By, in kliknite Deploy.

Oznake generator so del HTML-ja in jih Cloudflare pusti pri miru: glejte zavihek WordPress.

Node.js in Next.js

Express pošilja X-Powered-By: Express, dokler tega ne izklopite:

const app = express();
app.disable('x-powered-by');

Next.js pošilja X-Powered-By: Next.js. V next.config.js:

module.exports = {
    poweredByHeader: false,
};

Če je pred aplikacijo nginx, tam proxy_hide_header X-Powered-By; ujame vse, kar aplikacija še pošlje (glejte zavihek nginx).

IIS in ASP.NET

V datoteki web.config strani:

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
    <security>
      <!-- IIS 10 različica 1709 in novejše: glave Server sploh ni. -->
      <requestFiltering removeServerHeader="true" />
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime enableVersionHeader="false" />
  </system.web>
</configuration>

enableVersionHeader odstrani X-AspNet-Version, ki prav tako izda različico ogrodja.

Gostovane platforme

Na Shopifyju, Wixu, Squarespaceu in Webflowu strežnike upravlja platforma in glave nastavlja ona. Različic, ki bi bile pomembne, ne oglašuje, in če jo kontrolni seznam tam najde, na vaši strani ni kaj spremeniti.

Potrdite popravek

Znova poženite oba ukaza curl iz razdelka Preverite sami, nato v PulseKeeperju odprite tarčo in na zavihku Kontrolni seznam kliknite Preveri zdaj. Postavka se v nekaj minutah obarva OK, ne šele ob naslednjem dnevnem preverjanju.