Hardening

HTML-opmerkingen en generator-tag: wis de sporen van WordPress

HTML-opmerkingen en generator-tag: wis de sporen van WordPress

Open de broncode van je homepage: grote kans dat je er ‘This site is optimized with the Yoast SEO plugin v28.8’, ‘Site Kit by Google 1.190.0’ of ‘Elementor 4.3.5’ leest. Deze handtekeningen noemen plugins die alleen voor WordPress bestaan, vaak met hun versienummer. Dit artikel zet op een rij wat gangbare plugins in je pagina’s schrijven, legt uit hoe Masquerade Security (gratis versie) dat verwijdert en hoe je het zelf controleert.

Wat plugins in je broncode schrijven

Twee soorten sporen zitten verstopt in de HTML die elke bezoeker ontvangt:

  • De generator-tag: <meta name="generator" content="...">, in HTML bedoeld om de software te noemen die de pagina heeft gemaakt. WordPress zet er zijn versie in, en Site Kit, Elementor of WooCommerce ook.
  • HTML-opmerkingen: <!-- ... -->, onzichtbaar op het scherm maar leesbaar in de broncode. SEO-plugins omlijsten er hun tags mee, statistiekplugins ondertekenen hun trackingcode en caches noteren welk hulpmiddel de pagina heeft opgeslagen.
Twee fragmenten van dezelfde HTML-head. Voor het verbergen: opmerkingen van Yoast SEO 28.8 en Site Kit, generator-tags van WordPress, Site Kit by Google 1.190.0 en Elementor 4.3.5, rood gemarkeerd. Na het verbergen: alleen de titel, het script van Google en de generator-tag van Joomla! blijven over, groen gemarkeerd.
Dezelfde head, zoals een anonieme bezoeker hem ziet, zonder en met verbergen (vereenvoudigd fragment).

Geen enkele bezoeker heeft iets aan deze regels. Verschillende ontwikkelaars voorzien een filter om ze te verwijderen, maar zelden een zichtbare optie.

Waarom deze sporen ertoe doen

Detectietools lezen precies deze regels. Zoals we uitlegden in ons artikel over fingerprinting van WordPress, is één signaal genoeg om ze te overtuigen:

  • Ze verraden WordPress. In de definities van Wappalyzer (project webappanalyzer) is de opmerking van Yoast SEO genoeg om op WordPress te besluiten. Een generator-tag van Elementor of Site Kit zegt het net zo duidelijk: deze plugins bestaan alleen voor WordPress.
  • Ze geven versienummers. Dezelfde definities halen de versie van Yoast SEO, Elementor en Site Kit eruit. Een exacte versie vergelijk je in seconden met openbare kwetsbaarheidsdatabases; daarom loont het om de kwetsbaarheden in je plugins te monitoren.
  • Ze tonen je plugins zonder extra verzoek. WPScan heeft een aparte detector die alle HTML-opmerkingen van de pagina leest en vergelijkt met de bekende patronen van elke plugin.
  • Ze spreken de imitatie tegen. Een site die Joomla! aankondigt in zijn generator-tag maar een opmerking van Rank Math laat staan, valt door de mand bij iedereen die de broncode bekijkt.

Deze sporen verwijderen dicht geen enkel lek: het beperkt wat bots leren bij een eenvoudig bezoek. Wat verbergen wel en niet kan, lees je in WordPress verbergen: wat het oplevert en wat het niet doet.

Wat Masquerade Security verwijdert, per plugin

Dit zijn de sporen die de gratis versie verwijdert, gecontroleerd in de code van elke plugin en, bij de regels met ‘getest’, op een echte site. In de kolom ‘Verwijderd via’ staat ‘officieel’ voor de instelling die de ontwikkelaar voorziet en ‘filter’ voor het uitvoerfilter dat hieronder wordt beschreven.

PluginVerwijderd spoorVerwijderd viaGecachete pagina’s
Yoast SEO (getest, 28.8)Opmerkingen optimized with the Yoast SEO plugin v{version}, Premium inbegrepenOfficieel, filter als reserveSchoon
Rank Math (getest)Opmerkingen Search Engine Optimization by Rank Math, ook vertaaldOfficieel en filterSchoon
All in One SEOGenerator All in One SEO (AIOSEO) {version} en opmerkingenOfficieel (tag), filter (opmerkingen)Schoon
The SEO FrameworkOpmerkingen The SEO Framework by Sybre Waaijer, ook vertaaldOfficieel en filterSchoon
Site Kit by Google (getest, 1.190.0)Generator Site Kit by Google {version}, opmerkingen added by Site KitOfficieel (tag), filter (opmerkingen)Schoon
MonsterInsights, ExactMetrics, GTM4WP, Matomo, Meta-pixels, JetpackOndertekende opmerkingen, met versie bij MonsterInsights en ExactMetricsFilterSchoon
WP Statistics, ComplianzOndertekende opmerkingenOfficieel en filterSchoon
WP Super Cache (getest)Cached page generated by WP-Super-Cache, Dynamic page generated in...Officieel (zoals ‘Cache Status Messages’ uitvinken)Schoon, cachebestand gecontroleerd
LiteSpeed Cache (getest, 7.9.2)Page cached by LiteSpeed Cache {version}, Page optimized by LiteSpeed CacheOfficieel en laatste filter van de cacheSchoon
W3 Total Cache, WP Fastest Cache, WP-OptimizeOndertekende cacheopmerkingenOfficieel (en filter voor WP-Optimize)Schoon (WP-Optimize: behalve met WP_DEBUG)
Hummingbirdcached by the Hummingbird Performance plugin v{version}Laatste filter van de cacheSchoon
WP RocketThis website is like a Rocket... WP RocketOfficiële constanteVervangen door een generieke tekst
BreezeCache served by breeze CACHENiet verwijderdNee
Elementor (getest, 4.3.5)Generator Elementor {version}; features: ...; settings: ...Officieel (‘Generator Tag’, opgeslagen instelling ongewijzigd) en filterSchoon
WPBakery, Slider Revolution, Divi, ReduxGenerator met de naam en vaak de versieFilterSchoon
WooCommerce, WPMLGenerator WooCommerce {version}, WPML ver:{version}Module Identiteit (WooCommerce), filter (WPML)Schoon
WordPress zelfGenerator, opmerkingen die WordPress, wp-content, wp-json... noemenModule Identiteit en filterSchoon
De teksten van WPBakery komen uit de documentatie; die van Slider Revolution en Divi konden niet in de code worden gecontroleerd. SEOPress en Slim SEO schrijven niets openbaars.

Andere namen worden uit voorzorg herkend, zonder ze één voor één in de code te controleren: bijvoorbeeld Avada, Oxygen, Bricks, Beaver Builder, Astra, Kadence, Smush of Polylang.

Hoe het verwijderd wordt: eerst de officiële instelling

De plugin past drie methoden toe, in deze volgorde:

  1. De officiële instelling van elke plugin: een filter, optie of constante van de ontwikkelaar (bijvoorbeeld wpseo_debug_markers voor Yoast SEO of litespeed_comment voor LiteSpeed Cache). Dit is de betrouwbaarste methode, en ze werkt ook op de pagina die de cache opslaat. Je opgeslagen instellingen veranderen niet.
  2. Een uitvoerfilter op de HTML-pagina, voor alles zonder instelling. Het raakt alleen openbare pagina’s die via GET of HEAD worden opgevraagd (niet het beheer, AJAX, de REST API, feeds, sitemaps of robots.txt). Boven 4 MB of bij een fout gaat de pagina ongewijzigd weg.
  3. Het laatste filter van de cache, voor LiteSpeed Cache en Hummingbird, die hun opmerking na het uitvoerfilter toevoegen.

De volgorde telt: in onze tests zonder de officiële instellingen verwijderde het uitvoerfilter alleen de sporen van Yoast SEO, Rank Math, Site Kit en Elementor, maar niet die van LiteSpeed Cache, die pas daarna worden toegevoegd. De herkenning werkt op merknamen, niet op zinnen; daarom verdwijnen ook de opmerkingen die Rank Math, Site Kit of The SEO Framework vertalen.

Schema in twee delen. Bovenaan de drie methoden op volgorde: officiële instelling van de plugin, uitvoerfilter op de pagina, laatste filter van de cache voor LiteSpeed Cache en Hummingbird. Onderaan drie kolommen: wat verwijderd wordt (generator-tags, ondertekende opmerkingen, ook vertaalde), wat blijft (geïmiteerde generator, scripts en JSON-LD, voorwaardelijke opmerkingen, cachemarkeringen, neutrale opmerkingen tenzij de optie aan staat) en wat buiten het bereik valt (Breeze, generieke opmerking van WP Rocket, al gecachete pagina’s, HTTP-headers, CSS-klassen, bestandsadressen).
Drie methoden, in deze volgorde, en de grens tussen wat verwijderd wordt, blijft of buiten het bereik valt.

Wat bewust blijft staan

Om niets kapot te maken, blijven staan:

  • de generator-tag van de geïmiteerde software (module Identiteit vanaf niveau 2), bijvoorbeeld Joomla! - Open Source Content Management;
  • de volledige inhoud van de tags script (inclusief JSON-LD), style, pre, textarea, svg en template;
  • de voorwaardelijke opmerkingen van Internet Explorer (<!--[if ...]>);
  • de markeringen die caches nodig hebben: noptimize, mfunc, mclude, dynamic-cached-content, esi;
  • de neutrale opmerkingen van je thema (‘.site-header’, ‘Main navigation’), tenzij je de optie hieronder aanvinkt.

De grenzen die je moet kennen

  • Breeze schrijft zijn opmerking in zijn cachebestand, zonder filter of instelling: die blijft staan.
  • WP Rocket laat niet toe zijn opmerking te verwijderen: ze wordt <!-- Cached for great performance -->, zonder pluginnaam en zonder WordPress.
  • Pagina’s die al in de cache stonden voor de activering houden hun opmerkingen tot de cache wordt geleegd.
  • Servercaches en CDN’s (Varnish, Cloudflare, cache van de host) serveren de opgeslagen pagina: die is schoon als ze na de activering is opgeslagen, maar hun HTTP-headers blijven.
  • Wat geen opmerking of generator-tag is valt erbuiten: HTTP-headers (X-LiteSpeed-Cache, cf-edge-cache: cache,platform=wordpress van Cloudflare APO), CSS-klassen (elementor-, woocommerce, yoast-schema-graph), JavaScript-variabelen, JSON-LD-inhoud, bestandsadressen en de parameter ?ver=.
  • Ingelogde bezoekers zien de site zonder verbergen.

Onthoud vooral dit: zolang adressen als /wp-content/plugins/... in de pagina staan, herkent Wappalyzer WordPress. Opmerkingen verwijderen haalt vooral namen en versies weg; wie verder wil gaan, gebruikt de aliassen voor bestandsadressen van WP Masquerade Pro, die deze paden hernoemen.

Je eigen site controleren

Doe de test voor en na de activering, altijd als anonieme bezoeker:

  1. Open een privévenster, zonder ingelogd te zijn in WordPress.
  2. Bekijk de broncode van de homepage en van een bericht (Ctrl+U, of Cmd+Option+U op een Mac).
  3. Zoek (Ctrl+F) naar <!--, dan naar name="generator", dan naar de namen van je plugins.
  4. Laad de pagina opnieuw: het eerste bezoek vult vaak de cache, het tweede toont de pagina uit de cache.

Op de opdrachtregel:

curl -s https://www.example.com/ | grep -n -E "<!--|name=\"generator\""

Alleen de tag van de geïmiteerde software, voorwaardelijke opmerkingen, cachemarkeringen en, zonder de optie, de neutrale opmerkingen van het thema horen over te blijven. De video hieronder laat zien wat een nieuwsgierige bezoeker opmerkt.

Zo herken je een WordPress-site in een paar seconden (in het Frans).

De functie inschakelen

  1. Open Masquerade Security (het maskerpictogram in het beheermenu).
  2. Kies een modus (Essentieel, Aanbevolen of Maximaal) of zet de module Identiteit minstens op niveau 1 (‘WordPress verbergen’): vanaf dat niveau verdwijnen de sporen.
  3. Zet de schakelaar ‘Camouflage aan’ aan en sla op.
  4. Optioneel: vink in het tabblad Identiteit ‘Alle HTML-opmerkingen uit openbare pagina’s verwijderen’ aan. Deze optie staat standaard uit en verwijdert ook neutrale opmerkingen, maar houdt voorwaardelijke opmerkingen, cachemarkeringen en het dekmantelcommentaar (niveau 4, Pro).
  5. Klik op Caches legen (tab Diagnose), leeg ook de cache van je host of CDN en controleer daarna.

Het ingebouwde legen dekt LiteSpeed Cache, WP Super Cache en WP Rocket; details per host vind je op de pagina compatibiliteit met hosts en caches.

Gratis of Pro

Het verwijderen van pluginsporen hoort bij de gratis versie, zonder limiet of licentiesleutel. WP Masquerade Pro neemt de andere signalen voor zijn rekening:

FunctieGratisPro
HTML-opmerkingen en generator-tags van plugins verwijderdJaJa
Optie ‘Alle HTML-opmerkingen verwijderen’JaJa
Generator van WordPress verwijderd, tag van andere software5 profielen of een vrije naam41 profielen
RSD-, Windows Live Writer- en korte links verwijderdJaJa
Aankondiging van de REST API (tag en HTTP-header Link) en oEmbed-detectie verwijderdNeeJa
Aliassen voor bestandsadressen (/wp-content/, /wp-includes/)NeeJa
Wappalyzer-kenmerken en dekmantelcommentaar van de geïmiteerde softwareNeeJa
Functies rond de sporen van WordPress.

Meer over de technische links, de imitatie van een ander CMS en in de vergelijking. Download de gratis versie of bekijk de prijzen van Pro, vanaf € 59 per jaar excl. btw.

Om te onthouden

  • Yoast SEO, Site Kit, Elementor en caches ondertekenen je pagina’s, vaak met hun versie.
  • De opmerking van Yoast SEO is voor Wappalyzer genoeg om op WordPress te besluiten, en WPScan leest HTML-opmerkingen om je plugins op te sommen.
  • Masquerade Security, gratis, verwijdert ze vanaf niveau 1 van de module Identiteit: eerst de officiële instelling, dan het uitvoerfilter.
  • Grenzen: Breeze, WP Rocket (generieke tekst), al gecachete pagina’s (legen), HTTP-headers, bestandsadressen.
  • Controleer in een privévenster: zoek in de broncode naar <!-- en generator.

Bronnen

  • WordPress Developer: get_the_generator() (externe link, opent in een nieuw tabblad)
  • MDN: het attribuut name van meta, waarde generator (externe link, opent in een nieuw tabblad)
  • WordPress.org: Yoast SEO (externe link, opent in een nieuw tabblad)
  • WordPress.org: Site Kit by Google (externe link, opent in een nieuw tabblad)

Andere geraadpleegde bronnen: officiële pagina’s van de leveranciers.

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.