Een merchant die naar een card testing-aanval kijkt, ziet elke keer hetzelfde. Bestellingen voor het goedkoopste artikel in de catalogus, binnenkomend in golven, allemaal met een andere naam en een andere kaart en hetzelfde afleveradres. Honderden verlaten checkouts per dag die geen mens heeft aangemaakt. Bijna geen enkele slaagt, en juist dat deel doet mensen aannemen dat het het probleem van iemand anders is.
Signifyd mat card testing-aanvallen van januari tot april 2026 175% hoger dan in dezelfde maanden van 2025, en schrijft de stijging toe aan geautomatiseerde validatie van gestolen gegevens. Over hetzelfde venster zet het de fraudedruk in Noord-Amerika 33% hoger en pogingen tot accountovername 78% hoger.
De reden dat dit op Shopify zo moeilijk te stoppen is, heeft niets te maken met hoe goed de verdediging is. Het gaat om waar die staat.
Wat de aanvaller werkelijk aan het doen is
Het verwarrende deel is het motief. Iemand jaagt honderden bestellingen door je winkel en laat ze bijna allemaal liggen, wat op vandalisme lijkt totdat je begrijpt dat de bestellingen nooit het doel waren.
Veel van de kaartnummers zijn nooit van iemand gestolen. Ze zijn geraden. Een kaartnummer is niet willekeurig. De eerste zes tot acht cijfers vormen het Bank Identification Number, dat de uitgevende bank aanwijst, en die reeksen zijn openbaar. Het laatste cijfer is een controlecijfer dat volgt uit de Luhn-formule, rekenwerk dat iedereen kan uitvoeren. Een aanvaller kiest een BIN van een bank die het aanvallen waard is, vult de middelste cijfers met kandidaten en berekent het slotcijfer zodat elk nummer structureel geldig is. Dat levert een eindeloze voorraad nummers op die echt lijken voor elk formulier dat alleen naar de vorm kijkt.
Structureel geldig ligt nog ver van bruikbaar. De meeste van die nummers horen bij helemaal geen rekening, en van de nummers die dat wel doen is het merendeel verlopen, geblokkeerd of al ingetrokken. Hetzelfde geldt voor nummers uit een datalek, die maandenlang in een dump liggen voordat iemand eraan toekomt.
De aanvaller heeft dus een stapel kandidaat-nummers en geen idee welke ervan leven. Er is precies één manier om daarachter te komen, en dat is het aan een bank vragen. Een bank rechtstreeks bevragen kan een crimineel niet. Een merchant bevragen is triviaal, want elke e-commercecheckout ter wereld bestaat om een kaart aan een betaalprovider door te geven en het antwoord terug te sturen.
Dat antwoord is het product. Een kaart die een transactie van twee dollar goedkeurt is een levende kaart met een werkende vervaldatum en een geldige beveiligingscode, en op een doorverkoopmarkt is die vele malen meer waard dan een ongetest nummer. De goederen doen er niet toe. De aanvaller is niet aan het winkelen.
Waarom jouw winkel en niet die van iemand anders
Niets aan jouw winkel heeft dit aangetrokken. Card testing draait tegen elke checkout die goedkoop te bereiken is, en een Shopify-winkel is goedkoop te bereiken omdat Shopify consistent is. Dezelfde URL-patronen werken bij elke winkel op het platform, dus een script dat tegen één winkel is geschreven werkt zonder aanpassing tegen alle andere.
Kleine bedragen houden het stil. Aanvallers werken in eentjes en tweetjes, op het goedkoopste product in de catalogus, omdat een klein bedrag minder aandacht trekt van risicosystemen en bijna niets kost op de zeldzame keer dat het doorgaat. Cadeaubonnen en artikelen met waarde nul zijn nog beter, en merchants melden dat die als eerste worden aangevallen.
Hoe ze de checkout bereiken zonder ooit door je winkel te lopen
Dit is het deel dat mensen verrast, en er zit geen exploit in.
Shopify ondersteunt cart permalinks, een gedocumenteerde functie die elke merchant gebruikt voor advertentielinks en e-mailcampagnes. Een URL in de vorm /cart/{variant_id}:{quantity} bouwt een winkelwagen en stuurt de bezoeker rechtstreeks naar de checkout, langs de productpagina, de winkelwagenpagina en al het andere heen. Het bestaat zodat een Black Friday-mail iemand met één tik in de checkout kan zetten.
Een bot gebruikt het om dezelfde reden als een marketeer. Eén verzoek maakt de winkelwagen aan en landt op de checkout, met de storefront volledig overgeslagen. Zet er een geautomatiseerde browser bij die de betaalstap uitvoert, verspreid het verkeer over residentiële proxy-adressen zodat geen enkel adres opvalt, en het geheel draait onbeheerd door.
Niets in die volgorde is kapot of ongebruikelijk. De aanvaller gebruikt een ondersteunde functie precies zoals bedoeld, op een volume en met een doel die niemand voor ogen had.
De aanval laadt nooit de pagina’s die je verdedigt
Merchants die deze aanvallen beschrijven op het eigen communityforum van Shopify melden dat het verkeer rechtstreeks bij de checkout-URL aankomt, zonder via de storefront te browsen. Dat ene detail verklaart waarom de gebruikelijke reacties schoon terugkomen.
Een captcha op de productpagina bewaakt een pagina die de bot nooit opvraagt. Een app die landen of adressen blokkeert filtert storefront-sessies die de bot nooit opent. De fraudeanalyse van Shopify beoordeelt afgeronde bestellingen, en een card testing-poging die wordt geweigerd wordt er nooit een, dus het middel dat fraude moet vangen krijgt niets voorgeschoteld. Eén merchant in die draad meldt dat reCAPTCHA werd omzeild terwijl de bots de checkout gewoon bereikten.
Het gemelde patroon is consistent genoeg om te herkennen: een nieuw klantaccount per poging, wisselende e-mailadressen die vaak echt zijn en uit datalekken komen, en daaronder telkens hetzelfde hergebruikte afleveradres. Het doelwit is wat het minst kost. Merchants noemen net toegevoegde goedkope producten, en cadeaubonnen of artikelen met waarde nul waar de winkel die heeft.
Het volume maakt het duur om te negeren. Eén merchant meldt honderden frauduleuze verlaten checkouts per dag, een tweede een aanval die sinds juni 2025 onafgebroken doorloopt, en een derde mat verlaten checkouts 18,4% hoger over vier weken.
Elke geweigerde transactie kost je alsnog iets
Dit is het deel dat merchants onderschatten, en het is de reden dat een winkel met nul frauduleuze bestellingen alsnog zwaar beschadigd kan raken door een aanval.
Een autorisatieverzoek dat mislukt is een gegeven over jou, verstuurd naar de bank die het weigerde. Genoeg daarvan, dicht genoeg op elkaar, en je winkel gaat eruitzien als een slecht risico voor de instellingen die beslissen of je klanten worden goedgekeurd. Shopify beschrijft de uitkomst rechtstreeks: mislukte transacties verslechteren de positie van een merchant bij banken, en legitieme klanten worden lang na afloop van de aanval geweigerd, met een aanhoudende daling van de autorisatiepercentages.
Shopify meldt dat merchants die onder zijn bescherming vallen 13% meer van hun legitieme verkopen goedgekeurd zien. Lees dat als de omvang van het gat en niet als een functie, want het is hetzelfde getal van de andere kant bekeken.
Er is een tweede kostenpost zonder enige opbrengst. De frauduleuze records van verlaten checkouts kunnen niet worden verwijderd, en merchants melden dat ze dat hebben bevestigd met Shopify Flow, de admin en de API. Elk conversiepercentage, elk cijfer over winkelwagenverlating en elk funnelrapport over die weken is permanent onjuist.
Visa bewaakt enumeratie inmiddels als eigen categorie
Het Visa Acquirer Monitoring Program voegde de oudere fraude- en disputeprogramma’s samen tot één programma, met drempels die ingingen op 1 juni 2025 en een adviesperiode die op 30 september 2025 sloot.
De belangrijkste maatstaf is een verhouding tussen fraude en disputen enerzijds en afgewikkelde transacties anderzijds:
VAMP Ratio = Count of [Fraud (TC40) + Disputes (TC15)] / Count of Settled Transactions (TC05)
Voor merchants in de VS, Canada, de EU en Azië-Pacific lag de drempel Excessive bij een VAMP-ratio van 220 basispunten of hoger, samen met minstens 1.500 fraude- en disputegebeurtenissen in een maand. Die drempel daalde op 1 april 2026 naar 150 basispunten.
Daaronder staat de bepaling die specifiek over card testing gaat. Visa verplicht acquirers om merchants onder twee enumeratiedrempels te houden:
| Maatstaf | Drempel |
|---|---|
| Enumeration Ratio: geënumereerde autorisaties gedeeld door alle autorisaties, goedgekeurd en geweigerd samen | 2.000 basispunten, oftewel 20% |
| Enumeration Transaction Count: geënumereerde transacties in een maand, goedgekeurd en geweigerd samen | 300.000 |
Lees de eerste regel goed, want de noemer bestaat uit autorisatiepogingen en niet uit afgeronde bestellingen. Een winkel met bescheiden volume kan tijdens één aanhoudende aanval boven 20% van zijn autorisatiepogingen uitkomen zonder ooit in de buurt van 300.000 transacties te komen. Kleine winkels worden hier niet beschermd doordat ze klein zijn. Ze worden er juist door blootgesteld.
Visa publiceert de bedragen van de boetes bij deze niveaus niet. Betaalproviders die het programma documenteren beschrijven boetes per transactie die onder de maatstaf meetelt zodra de gedoogperiode afloopt, en minstens één documenteert een vroeg waarschuwingsniveau waaraan helemaal geen kosten hangen. Wie het bedrag nodig heeft, vraagt het bij zijn acquirer op in plaats van een cijfer uit een blog te vertrouwen, en dat geldt ook voor de cijfers die met zelfverzekerde dollarbedragen rondgaan.
Wat Shopify doet, en waar het ophoudt
Shopify publiceerde in juni 2026 een beschrijving van zijn eigen verdediging, en de cijfers daarin verdienen het om serieus te worden genomen.
Het machine learning-model beoordeelt elke betaalpoging voordat die de processor bereikt, en blokkeert ongeveer 90% van de card testing-aanvallen op gastcheckouts met creditcard. Dat is een echte verdediging die echt werk doet, en die is gratis als je Shopify Payments gebruikt.
De dekking kent beperkingen. Die geldt voor gastcheckouts met creditcard, en alleen voor merchants die Shopify Payments gebruiken. Ongeveer 90% laat bovendien ruwweg één poging op de tien door, wat bij de volumes die merchants beschrijven nog steeds een flink aantal autorisaties per dag op je percentages betekent.
Shopify beschrijft ook hoe de aanvallen zijn veranderd, en die beschrijving doet er meer toe dan de percentages. Moderne aanvallen zijn verspreid en laag in volume over duizenden merchants tegelijk, gerouteerd via residentiële proxy’s om op gewoon verkeer te lijken. Dat is een bewust ontwerp om precies de verdediging te verslaan waar de meeste mensen als eerste naar grijpen.
De edge kan de checkout nu zien, en dat was niet altijd zo
Jarenlang luidde het standaardadvies om een proxy weg te houden van de checkout. Richtlijnen die vandaag nog rondgaan vertellen Shopify-merchants om checkout-subdomeinen ongeproxyd te laten.
Dat advies is achterhaald, en het kost een minuut om het te testen. Vraag de checkout-URL op bij een live Shopify-winkel en die komt uit op je eigen primaire domein, in de vorm yourdomain.com/checkouts/cn/<token>. Hij staat niet op een hostnaam van Shopify. Een zone die via Cloudflare wordt geproxyd ziet die verzoeken en kan erop handelen.
Dat verandert wat je tot je beschikking hebt. Rate limiting, managed challenges en WAF-regels kunnen worden geschreven tegen het pad dat de aanval werkelijk gebruikt, in plaats van tegen de storefront die hij nooit aanraakt.
Eén uitzondering is het waard om ronduit te benoemen in plaats van later te ontdekken. Shop Pay en andere versnelde checkouts leiden door naar een domein van Shopify buiten je zone, en geen enkele regel van jou reikt tot dat pad.
Regels die bij de aanval passen
Gepubliceerde richtlijnen voor checkoutpaden beginnen rond 5 tot 10 POST-verzoeken per IP per minuut, gevolgd door een blokkade of een challenge van enkele minuten. Dat is laag genoeg om een bot te stoppen die het endpoint bestookt en hoog genoeg om een echte koper die een geweigerde kaart opnieuw probeert met rust te laten.
Varieer de strengheid per pad in plaats van die overal op te schroeven. Checkout- en betaalpaden verdienen een strengere behandeling dan het bekijken van producten, en dat is precies het voordeel van regels aan de edge in plaats van in een app die de twee niet uit elkaar kan houden.
Gebruik een challenge voordat je een blokkade gebruikt. LexisNexis vond dat 56% van de Amerikaanse retailers en 54% van de Amerikaanse e-commercemerchants meer klantverloop meldt door hun eigen antifraudemaatregelen, en dat zijn echte kosten die echte kopers betalen. Een managed challenge kost een vals positief een seconde. Een blokkade kost je de verkoop.
Combineer de challenge met de rate limit in plaats van te kiezen. Een challenge werkt bij het formulier. Een rate limit vangt verzoeken die het formulier nooit renderen, en dat is hier het gedocumenteerde gedrag.
Aanvaard wat een limiet per IP niet kan. Tegen een verspreide aanval die dun is uitgesmeerd over residentiële proxy’s is tellen per IP een ondergrens en geen antwoord, en de eerlijke versie van dit advies zegt dat ook. Eén merchant in die communitydraad meldt duizenden dollars aan een WAF te hebben besteed met beperkt resultaat, en dat is wat er gebeurt wanneer goed gereedschap op de verkeerde laag wordt gericht.
Neem het doelwit weg voordat je iets afstelt
De goedkoopste winst zit hier helemaal niet in regels, en merchants melden dat die winst werkt.
Haal producten met waarde nul en cadeaubonnen offline die de winkel niet nodig heeft, want daar grijpen de bots als eerste naar. Eén merchant meldt dat het offline halen daarvan samen met de overstap naar een checkout in drie pagina’s het grootste deel van het volume wegnam.
Betalingen handmatig vastleggen in plaats van automatisch haalt het directe autorisatiesignaal weg waar de aanvaller voor kwam, waardoor je winkel een slechte testopstelling wordt en ze eerder ergens anders heen gaan.
Geen van beide vraagt om een WAF, een app of een gesprek met je acquirer. Allebei maken ze het doelwit minder aantrekkelijk, en dat is een duurzamer antwoord dan proberen een aanvaller te overtroeven die sneller van adres wisselt dan jij ze kunt opsommen.
Wat dit is en wat het niet is
Dit artikel beschrijft aanvalspatronen die merchants openbaar hebben gemeld en drempels die Visa heeft gepubliceerd. Het is geen juridisch of compliance-advies, en de specifieke kosten, herstelverplichtingen en meldplichten die aan jouw account hangen komen van je acquirer.
Staat je winkel op dit moment onder aanval, dan is de volgorde kort. Neem de goedkope doelwitten weg, zet een challenge en een rate limit op het checkoutpad, en leg je autorisatiepercentage voor aan je betaalprovider voordat het weigeringspatroon iets wordt dat je moet uitleggen in plaats van iets dat je aan het oplossen bent.