CASINO-SPAM — DATABASE-CLEANUP

WordPress vol casino-spam?

Pagina's over "welkomstbonussen" en "gratis spins" in Google onder jouw domein, een witte pagina als bezoekers vanaf Google klikken, robots.txt die plotseling naar onbekende sitemaps verwijst? De besmetting zit meestal niet in een bestand maar als MySQL-trigger of base64-loader in de database — onzichtbaar voor Wordfence en Sucuri. Daarom blijft 'ie terugkomen. Ik ruim casino-spam-besmettingen dagelijks op, inclusief de database-laag die andere cleanups missen.

  • Reactie binnen het uur bij actief misbruik
  • Vertrouwelijke aanpak, NDA op verzoek
  • Database-laag inbegrepen — geen herhaling

Hoe ziet casino-spam er in de praktijk uit?

Bij elke nieuwe melding doe ik eerst hetzelfde rondje. Inmiddels zou ik 't met m'n ogen dicht kunnen — vier dingen die zonder uitzondering binnen een minuut duidelijk maken of ik te maken heb met deze besmetting.

Eerst Google. Ik typ site:[hun-domein].nl casino in. Komen er resultaten als "Power Play Casino Welkomstbonus Eerste Storting" — terwijl het een coachingspraktijk of detailhandel betreft — dan weet ik al genoeg. Ik kopieer zo'n URL naar incognito (niet vanuit Google klikken, dat triggert vaak een redirect-trap), en daar zie ik de casino-spam pagina open en bloot staan onder hun domein. Zoiets:

https://[gehackte-site].nl/online-casino-echt-geld/
WordPress casino spam verwijderen — screenshot van een gehackte Nederlandse WordPress-site met casino-pagina onder eigen domein: header 'Online Casino NEDERLAND' met Nederlandse vlag, fake reviewer, vier trust-badges, en twee casino-reviews (Spin Star en Revery Play) met iDEAL, Bancontact en Trustly betaalmethoden plus 'NU AFSPELEN' knoppen.
Echte screenshot van zo'n casino-pagina onder een Nederlandse zakelijke site — opgevraagd in incognito vanuit een verse Safari-sessie. «Online Casino Nederland»-header met Nederlandse vlag, een verzonnen «casino-expert» met foto, vier nep trust-badges en twee «reviews» van «Spin Star» en «Revery Play» met iDEAL- en Bancontact-logo's. Volledig in het Nederlands, met NL-betaalmethoden — specifiek gemaakt om Nederlandse Google-bezoekers binnen te halen.

Dan robots.txt. Open [hun-domein].nl/robots.txt in je browser en scroll naar beneden. Een normale WordPress-site heeft daar één Sitemap-regel — meestal de Yoast /sitemap_index.xml. Wat ik bij besmette sites altijd zie:

Sitemap: https://[hun-domein].nl/?feed=xmlsitemap19
Sitemap: https://[hun-domein].nl/?feed=xmlsitemap41
Sitemap: https://[hun-domein].nl/?feed=xmlsitemap1701

Die xmlsitemap[cijfer]-regels zijn hard bewijs. Geen enkele legitieme plugin schrijft zoiets, en het patroon is consistent over alle besmettingen die ik tegenkom. Aanvallers gebruiken dit om Google netjes naar hun gokken-content te wijzen.

Vervolgens kijk ik in WordPress-admin — als ik die toegang al heb — naar Gebruikers → Alle gebruikers. Vrijwel altijd staat daar een account dat de klant niet kent. Meestal blogclient, soms wpsupport, vaak met een leeg of nep e-mailadres. Niet meteen verwijderen, eerst noteren. Die account is geen toeval: een database-trigger maakt 'm automatisch terug als je 'm wist. Daarover later meer.

En tot slot, het sterkste signaal — en de reden dat klanten me bellen. Wordfence vond malware, ruimde 't op, alles leek goed. Twee weken later: dezelfde gokken-pagina's terug in Google. Vorige maand nog had ik een coaching-praktijk waar de besmetting drie keer eerder "was opgeruimd". Reden: de persistence zit als MySQL-trigger in de database, niet als bestand. File-scanners zoals Wordfence en Sucuri scannen geen database-schema, dus de trigger blijft staan en zet alles netjes terug.

Als één van deze vier signalen klopt, dan is 't vrijwel zeker raak. Twee of meer? Dan zijn we het stadium "misschien" voorbij — tijd om door te pakken voordat Google's ranking-vertrouwen verder daalt.

CHECK ZELF IN 5 MINUTEN OF JE SITE BESMET IS

Drie concrete controles die je nu kunt doen — zonder kennis van WordPress-internals. Eentje rood? Dan ben je vrijwel zeker besmet en wil je niet wachten met opruimen.

  1. Check 1 — open jouwdomein.nl/robots.txt in je browser. Scroll naar beneden en zoek naar regels die beginnen met Sitemap:. Een normale WordPress-site heeft daar één regel: meestal https://jouwdomein.nl/sitemap_index.xml (Yoast) of /sitemap.xml. Zie je regels als Sitemap: https://jouwdomein.nl/?feed=xmlsitemap19, xmlsitemap41, xmlsitemap1701 of vergelijkbare cijfers? Dat is het exacte spam-injectie-patroon. Direct hulp inschakelen.
  2. Check 2 — zoek in Google: site:jouwdomein.nl casino. Vervang casino ook met gokken, bonus, of spins. Vind je resultaten waar je geen content over hebt geschreven? Klik er niet op vanuit Google (vaak een redirect-trap) maar kopieer de URL en plak die direct in een incognito-venster. Zie je een casino-pagina onder jouw domein? Besmet.
  3. Check 3 — database-triggers (als je phpMyAdmin-toegang hebt). Open phpMyAdmin, selecteer je WordPress-database, ga naar het SQL-tabblad en voer uit: SHOW TRIGGERS;. Verwacht: leeg. WordPress zelf gebruikt geen MySQL-triggers, dus alles wat hier verschijnt is door iemand anders aangemaakt. Een trigger met de naam after_insert_comment of vergelijkbaar is vrijwel altijd kwaadaardig — die maakt automatisch admin-accounts aan zodra er bepaalde comments binnenkomen.
  4. Bonus — check wp_options op verdachte rijen. In phpMyAdmin: SELECT option_id, option_name FROM wp_options WHERE option_name REGEXP '^[a-f0-9]{32}$';. Dit zoekt naar option-namen die een 32-karakter MD5-hash zijn — geen enkel legitiem WordPress-plugin gebruikt zulke namen. Hits? Dat is vrijwel zeker de payload-loader.
  5. Niet zelf prullenbak-droppen. Verleidelijk om die trigger of options direct te verwijderen, maar zonder forensische backup en zonder begrip van wat erbij hoort breek je vaak meer dan je oplost. Het script dat de trigger reactiveert zit ergens anders. Eerst de hele aanvalsketen vinden, dan in juiste volgorde opruimen. Bel mij voor de complete cleanup.
Sneller weten waar je staat?
Laat de WPTS scanner deze checks automatisch doen
Robots.txt, title-keywords, base64-loaders, SSL, headers én live klikbare spam-URLs — in 15 seconden. Gratis, geen account.
Start gratis scan

ZO RUIM IK CASINO-SPAM OP — DETECT, CLEAN, HARDEN

Casino-spam-besmettingen hebben typisch drie lagen: een persistence-mechanisme in de database, een loader die bij elke paginalading content injecteert, en honderden of duizenden gepubliceerde spam-posts. Alle drie moeten in de juiste volgorde weg, anders draait 'ie binnen dagen weer.

01

Detect & Contain

Forensische backup van bestanden + database. Database-sweep op triggers, events, stored procedures en verdachte option-rijen. File-integrity-check tegen schone WordPress-baseline. Identificatie van de complete aanvalsketen voordat ik iets aanraak.

02

Clean

Triggers droppen, geïnjecteerde admin-accounts verwijderen, payload-options uit wp_options, alle casino-spam posts uit wp_posts + bijbehorende meta en relaties. Aanval-comments wissen. Geïnfecteerde backups onmiddellijk weggooien — restore daarvan = volledige herinfectie.

03

Harden & Monitor

Trackback/pingback-endpoints blokkeren (in .htaccess én database), wp-config.php salts vernieuwen, alle admin-wachtwoorden resetten, robots.txt herschrijven, 2FA aanzetten. Search Console-herindexering en monitoring voor 30 dagen.

HOE DE BESMETTING TECHNISCH IN ELKAAR ZIT

Voor wie de details wil — en een idee wat ik in de praktijk tegenkom. Recent had ik een coaching-praktijk in Zuid-Holland waar de besmetting drie keer eerder "was opgeruimd" en steeds terugkwam. Wat ik vond, in drie lagen.

Laag 1 — Persistence-trigger (database)

In de database stond een MySQL-trigger op de wp_comments-tabel:

CREATE TRIGGER `after_insert_comment`
AFTER INSERT ON `wp_comments`
FOR EACH ROW BEGIN
    IF NEW.comment_content LIKE
       '%are you struggling to get
         comments on your blog?%'
    THEN
        INSERT INTO wp_users (...)
          VALUES (..., 'blogclient',
            '$wp$2y$...', ...);
        INSERT INTO wp_usermeta (...)
          VALUES (..., 'capabilities',
            'administrator');
    END IF;
END

Vertaald: zodra iemand een comment plaatst met de zin "are you struggling to get comments on your blog?", maakt de database automatisch een admin-account aan. Aanvaller plaatst die comment, krijgt admin terug, plant alles opnieuw. Onzichtbaar voor Wordfence — die scant geen schema.

Laag 2 — Loader in wp_options

In wp_options stond een rij met een 32-karakter MD5-hash als naam en autoload=yes. De inhoud was een serialized PHP-array met daarin een base64-string. Decodeer je 'm, dan vind je iets als:

<script src="data:text/javascript;
base64,bmV3IEltYWdlKCkuc3JjPS8v
Y291bnRlci55YWRyby5ydS9oaXQ7..."
>

Die inline-script doet drie dingen bij elke paginalading: een tracking-pixel laden van counter.yadro.ru, het hele <body>-element verwijderen, en een script injecteren van een gokken-domein. Bezoekers krijgen een witte pagina, daarna een redirect.

Laag 3 — Content-injectie

Honderden tot duizenden gepubliceerde posts in wp_posts met titels als "Casino Cashback Bonus" of "Beste online casino België", allemaal aangemaakt door een gebruiker-ID die niet meer in wp_users bestaat. Plus geinjecteerde sitemap-feeds (?feed=xmlsitemap19) die deze posts opsommen voor Google.

De robots.txt verwijst naar die fake sitemaps, dus Googlebot crawlt en indexeert braaf alle casino-pagina's onder jouw domein. Binnen weken zie je jezelf verschijnen in Google-zoekresultaten voor zoekopdrachten als "welkomstbonus casino" — terwijl je site over coaching of zorg gaat.

Hoe ze binnenkwamen

Bij die coaching-praktijk was het de klassieker: een ooit-geïnstalleerd plugin wp-file-manager-pro. Die plugin had in 2020 een ongepatchte RCE (CVE-2020-25213) waarmee aanvallers PHP-code konden uploaden zonder authenticatie. Plugin was sindsdien verwijderd, maar de backdoors uit 2020 bleven achter in de database.

Andere routes die ik regelmatig zie: gedeelde server waar één buur-site een lek heeft, oude versie van Elementor, of een gehackt admin-wachtwoord uit een eerdere datalek. Database-persistence overleeft plugin-deletes, theme-updates en zelfs een complete WordPress-core-reinstall. Daarom moet de database-laag mee in de cleanup.

Het ingangspoort wordt vaak wp-trackback.php: de aanvaller hoeft geen comment-formulier te gebruiken, maar stuurt een POST-request naar dat endpoint. WordPress slaat die trackback op als rij in wp_comments (met comment_type='trackback'), de trigger vuurt, admin-account verschijnt. Vandaar dat ik in mijn cleanup zowel ping_status='closed' op alle posts zet én wp-trackback.php hard blokkeer in .htaccess.

VIJF HARDENING-REGELS DIE CASINO-SPAM VOORKOMEN

Een goede cleanup duurt een dag, maar zonder hardening daarna ben je binnen weken weer besmet. De vijf concrete maatregelen die ik bij elke cleanup standaard installeer. Voor een complete wp-config hardening (constants, salts, file-permissions) zie ook het uitgebreide artikel wp-config.php beveiligen.

  1. 01

    Blokkeer trackback en XML-RPC endpoints

    Vrijwel niemand gebruikt trackbacks of XML-RPC nog actief. Beide endpoints zijn populaire ingangspunten voor casino-spam-aanvallers — daar komt de spam-comment binnen die de database-trigger afvuurt. Voeg toe in .htaccess in de site-root:

    <Files "wp-trackback.php">
        Require all denied
    </Files>
    
    <Files "xmlrpc.php">
        Require all denied
    </Files>
  2. 02

    Zet ping_status en comment_status op closed

    Veel themes laten ping_status='open' staan als legacy WordPress-default — juist daar komen trackbacks binnen, ook als comments dicht staan. Sluit alles in één SQL-commando:

    UPDATE wp_posts
    SET comment_status = 'closed',
        ping_status = 'closed';

    Plus de WP-default voor nieuwe posts uitzetten in Settings → Discussion.

  3. 03

    Beperk de MySQL-user rechten

    De database-user in wp-config.php heeft typisch ALL PRIVILEGES — veel te veel. Voor WordPress is SELECT, INSERT, UPDATE, DELETE genoeg. Vraag je hosting om deze rechten in te trekken:

    REVOKE TRIGGER, CREATE ROUTINE, ALTER
    ON wp_database.*
    FROM 'wp_user'@'localhost';

    Dan kunnen aanvallers geen triggers meer planten, ook al krijgen ze admin-toegang tot WordPress.

  4. 04

    Periodieke trigger-check als sanity test

    Wordfence en Sucuri scannen geen database-triggers — dat is de blinde vlek. Dus die check moet je handmatig doen, één keer per maand. In phpMyAdmin:

    SHOW TRIGGERS FROM jouw_database;

    Verwacht resultaat: leeg. WordPress gebruikt zelf geen triggers. Verschijnt er iets dat je niet kent? Onmiddellijk uitzoeken — vrijwel altijd is dat een persistence-backdoor.

  5. 05

    2FA op alle admin-accounts

    Casino-spam-aanvallers proberen vaak hergebruikte wachtwoorden uit eerdere datalekken. Met 2FA via TOTP-app (Authy, Google Authenticator) is een gestolen wachtwoord op zichzelf niet meer genoeg. Wordfence Login Security regelt dit gratis, inrichten kost 5 minuten per admin-account. Niet-onderhandelbaar voor sites die ik beheer.

WAAROM JE HOSTER, PLUGIN OF WEBBOUWER DIT MEESTAL NIET OPLOST

Een eerlijk overzicht van wat je — terecht of onterecht — van bestaande partijen mag verwachten bij casino-spam.

Wat doen hoster, plugin en webbouwer wél?

  • Hoster: account waarschuwen bij spam-uitstoot
  • Hoster: hosting-niveau backups beschikbaar maken
  • Hoster: server-firewall beheren
  • Security-plugin: bekende file-based malware-signatures detecteren
  • Security-plugin: brute-force-pogingen op wp-login blokkeren
  • Webbouwer: oorspronkelijke site bouwen en functioneel onderhouden

Wat doen ze meestal niét?

  • Hoster: database-triggers, stored procedures of events scannen
  • Hoster: SEO-spam injecties uit wp_options verwijderen
  • Hoster: hardening op WordPress-niveau implementeren
  • Plugin: MySQL-schema-veranderingen detecteren
  • Plugin: na detectie de daadwerkelijke cleanup doen
  • Webbouwer: forensische database-analyse (zelden hun specialisme)

In de praktijk zie ik gehackte sites die door Wordfence Premium zijn "schoongemaakt" maar binnen 2-3 weken opnieuw casino-pagina's tonen in Google. De plugin vond de file-based malware, maar miste de trigger op wp_comments, de hash-named option in wp_options en de honderden geïnjecteerde posts onder een orphan-author. Die complete database-uitkam-cyclus is waar mijn werk zit.

Casino-spam in Google-index? Elke dag wachten kost rankings.

Google indexeert nieuwe casino-pagina's onder jouw domein in dagen. Hoe langer 't blijft staan, hoe meer organische posities je verliest — en hoe meer trust-schade richting bezoekers. Eén bericht en ik kijk meestal binnen het uur. Complete cleanup typisch binnen één werkdag.

Direct hulp aanvragen

VEELGESTELDE VRAGEN OVER CASINO-SPAM CLEANUP

De vragen die klanten in paniek-modus meestal als eerste stellen.

Waarom vindt Wordfence de casino-spam niet?

Wordfence en de meeste security-plugins scannen bestanden op disk en kijken naar bekende malware-signatures in PHP-code. Bij casino-spam zit de persistence vrijwel altijd in de database — als MySQL-trigger, als geserialiseerde array in wp_options, of als geïnjecteerde rijen in wp_posts. Triggers en database-schema worden niet gescand door file-scanners, dus de besmetting komt steeds terug ook al lijkt de bestandsmap schoon.

Hoe weet ik snel of mijn site casino-spam heeft?

Drie checks die je nu kunt doen. Eén: open jouwdomein.nl/robots.txt en kijk of er Sitemap-regels staan met ?feed=xmlsitemap en cijfers. Twee: zoek in Google site:jouwdomein.nl casino — zijn er resultaten die je niet hebt gemaakt? Drie: als je phpMyAdmin hebt, voer SHOW TRIGGERS; uit in je database. WordPress gebruikt zelf geen triggers, dus alles wat hier staat is verdacht. Eén rood = direct opruimen.

Geen zin in handmatig checken? Gebruik mijn gratis security scan — doet dezelfde drie checks in 15 seconden plus 5 andere, en laat bij een hit klikbare URLs van de spam-pagina's zien.

Komt de besmetting echt terug als ik 'm zelf verwijder?

Vrijwel altijd, ja — tenzij je de database-trigger droppen meeneemt. Een typisch geval dat ik tegenkom: klant verwijdert handmatig de admin-account "blogclient", veranderd alle wachtwoorden, voelt zich opgelucht. Twee dagen later: account is terug. Reden: de trigger op wp_comments wacht op een trackback met een bepaalde zin en maakt het account daarna automatisch opnieuw aan. Zonder DROP TRIGGER blijft dit oneindig herhalen.

Hoeveel kost het opruimen van casino-spam?

Voor de meest voorkomende variant (gamblersrules / iidoors-loader met trigger-backdoor) heb ik een vaste prijs en is 't typisch binnen een werkdag klaar. Voor complexere besmettingen waar meerdere malware-families zijn gestapeld of er duizenden geïnjecteerde posts staan, kan 't 1-2 dagen kosten. Diagnose is altijd kosteloos — ik zeg vooraf wat ik denk dat 't gaat kosten.

Hoe komen aanvallers binnen om casino-spam te plaatsen?

Twee hoofdroutes. Eén: een verouderde plugin met een bekende kwetsbaarheid — File Manager Pro met CVE-2020-25213 is een klassieker maar er zijn er tientallen actief. Twee: een gedeelde server waar één buur-site al besmet is, en dezelfde misconfiguratie laat aanvallers naar andere klanten over. Sommige goedkopere hostingplatformen hebben opvallend veel besmette klanten op dezelfde server — dat is een patroon dat ik regelmatig in mijn werk tegenkom.

Hoeveel schade doet casino-spam aan mijn site?

Drie soorten schade. Eén: Google-rankings storten in zodra Googlebot de casino-content gaat indexeren onder jouw domein — typisch verlies van 60-90% van organisch verkeer in 4-8 weken. Twee: reputatie-schade als bezoekers worden doorgestuurd naar gokken-sites, vooral pijnlijk bij zorgprofessionals, advocaten of accountants. Drie: hosting-account-suspending op termijn — providers schorsen domeinen met aanhoudende spam-uitstoot.

Welke toegang heb je nodig om casino-spam te verwijderen?

Idealiter: SSH/SFTP-toegang plus database-toegang via phpMyAdmin of een SQL-client. Met SSH kan ik snel logs scannen en file-integrity-checks doen; voor de database-laag heb ik echt SQL-toegang nodig om triggers te kunnen droppen en option-rijen te kunnen verwijderen. Geen SSH? Dan FTP plus hosting-controlpanel volstaat ook. Alle credentials behandel ik vertrouwelijk en wijzig ik aan het eind zodat de toegang dichtgaat.

Krijg ik mijn Google-rankings terug na de cleanup?

In vrijwel alle gevallen, ja — mits de cleanup grondig was. Zodra de casino-posts en fake sitemaps weg zijn, haalt Google die pagina's vanzelf uit de index bij de volgende crawl. Voor versnelling: schone sitemap.xml indienen in Search Console, URL Inspection → Request Indexing voor je belangrijkste echte pagina's, en eventueel een Removal Request voor de meest problematische URL's. Volledig herstel: typisch 2-6 weken.

Kan ik 't zelf opruimen met de SQL-snippets hierboven?

Technisch kan het — ik laat de SQL bewust zien omdat ik vind dat site-eigenaren moeten kunnen begrijpen wat er met hun site gebeurt. Maar in de praktijk: zonder forensische backup, zonder begrip welke option-rijen écht malware zijn versus legitiem, en zonder hardening na de cleanup blijft het kwetsbaar. Voor een eenvoudige site op niet-bedrijfskritisch niveau is zelf opruimen prima. Voor commerciële sites of zorgprofessionals is professionele hulp doorgaans de meer kosteneffectieve route.

NEEM CONTACT OP

Bellen of WhatsApp is bij urgente zaken het snelst — meestal reageer ik binnen het uur. Ook mailen of een bericht via het formulier op de homepage kan altijd.

Online — reactie meestal binnen 4 uur
Daniel Mulder

Daniel Mulder

Website Technical Support Specialist
WordPress · Drupal · Joomla · OpenCart · CMS Made Simple

15+ JAAR
500+ SITES
4u REACTIE
Diagnose altijd kosteloos 30 dagen garantie op fixes KvK 63456842 · Werkzaam in heel NL
WhatsApp Snelste manier — direct chatten, ook foto's en logs delen 06 12 29 47 06 Bellen — bij noodgevallen het snelste pad info@wpts.nl E-mail — voor uitgebreidere uitleg, screenshots of logs

Werkuren

Maandag – Vrijdag09:00 – 18:00
ZaterdagOp afspraak
ZondagGesloten

Spoed buiten werkuren? Bel altijd — bij echte noodgevallen reageer ik vaak binnen 30 minuten.