Zum Inhalt springen
Sicherheit

Rabattcodes in der Black Week: Missbrauch früh erkennen

Rabattcodes in der Black Week schützen: Codelänge, Rate-Limit am Gutscheinfeld, Alarm bei Fehlversuchen und ein Neukundenrabatt, der Mehrfachkonten standhält.

21 Min. Lesezeit SicherheitBlack WeekMonitoringRabattcodes

Kurz und einfach erklärt

Ein Rabattcode ist wie ein kleines Geheimnis mit Geldwert. Wer ihn nicht kennt, kann versuchen, ihn zu raten. Programme können sehr viele Codes ausprobieren.

In Wochen mit großen Rabattaktionen ist das besonders heikel. Dann sind viele Codes im Umlauf.

Der Beitrag zeigt, was hilft. Codes sollten schwer zu raten sein. Das Feld für Gutscheine bremst zu viele Versuche. Viele falsche Versuche lösen einen Alarm aus.

Wir werten die Versuche am Feld für Gutscheine in Ihrem Shop aus. Vor einer großen Aktion stellen wir den Alarm strenger ein.

Ein Rabattcode ist ein kleines Geheimnis mit Geldwert. Wer ihn kennt, bekommt einen Nachlass – und wer ihn nicht kennt, kann ihn raten, sofern der Shop das Raten zulässt. Das OWASP-Projekt zu automatisierten Bedrohungen führt genau dieses Muster als eigene Bedrohung OAT-002 Token Cracking: das massenhafte Durchprobieren von Gutscheinnummern, Rabattcodes und ähnlichen Kennungen (OWASP Automated Threats). In der Black Week trifft diese Bedrohung auf den Zeitraum, in dem die meisten Codes gleichzeitig gültig sind. Für Black Friday und Cyber Monday 2025 rechnete der Handelsverband Deutschland mit 5,8 Milliarden Euro Umsatz (HDE), und 52 Prozent der Internetnutzenden ab 16 Jahren wollten die reduzierten Preise nutzen (Bitkom). Black Friday fällt 2026 auf den 27. November. Ab Mitte Oktober bleiben damit gut sechs Wochen, um Codelänge, Rate-Limit, Alarmierung und Aktionsende so einzurichten, dass ein Bot am Gutscheinfeld auffällt, bevor er Marge abschöpft. Dieser Beitrag zeigt die Rechnung hinter sicheren Codes, die Stellen, an denen Shops typischerweise nachrüsten müssen, und einen Fahrplan bis zur Aktionswoche.

Das Wichtigste in Kürze

  • OWASP führt das massenhafte Durchprobieren von Gutschein- und Rabattcodes als eigene Bedrohung OAT-002 (OWASP Automated Threats). Je mehr gültige Codes im Umlauf sind, desto schneller trifft ein Bot einen davon.
  • Das Beispielmuster der Shopware-Dokumentation mit 3 Zufallsbuchstaben und 2 Zufallsziffern ergibt 1.757.600 Codes; bei 10.000 ausgegebenen trifft rechnerisch jeder 176. Rateversuch (eigene Rechnung nach Shopware-Dokumentation).
  • Das Gutscheinfeld braucht ein eigenes Rate-Limit je Warenkorb, Kundenkonto und IP-Netz. Der Standard-Limiter für Warenkorbpositionen zählt über die Store-API je Code und IP-Adresse, am Gutscheinfeld der Storefront gar nicht (Shopware-Quelltext).
  • Fehlversuche am Gutscheinfeld gehören als eigene Kennzahl ins Monitoring: Schwelle aus dem Verlauf der Vorwochen, engere Einstellung und verstärkte Bereitschaft für die Woche um den Black Friday am 27. November 2026.
  • Neukundenrabatte hängen in Shopware am Kundenkonto, nicht an der Person (Shopware-Dokumentation). Normalisierte E-Mail-Adresse, Anschrift und Zahlungsweg zeigen Mehrfachkonten, ohne echte Neukunden auszusperren.
  • Individuelle Codes sind nur einmal einlösbar (Shopware-Dokumentation). Feste Codes brauchen Gesamt- und Kundengrenzen; zum Aktionsende werden Gültigkeit, Deaktivierung und Einlösungen geprüft.

Warum Rabattcodes ein eigenes Angriffsziel sind

Ein Gutscheincode funktioniert wie ein Passwort ohne Benutzernamen. Er schaltet einen Vorteil frei, der sich in Geld umrechnen lässt, und der Shop prüft bei jeder Eingabe, ob er gültig ist. Für Login-Geheimnisse begrenzt NIST aufeinanderfolgende Fehlversuche je Konto auf höchstens 100 und sperrt das Zugangsmerkmal danach (NIST SP 800-63B). Am Gutscheinfeld fehlt dieses Konto: Es gibt nichts, das nach zu vielen Fehlversuchen gesperrt wird, und keinen Besitzer, der eine Warnmail bekommt. Wer dort rät, stört zunächst niemanden, und die Antwort des Shops verrät bei jedem Versuch, ob er richtig lag.

Mass enumeration of coupon numbers, voucher codes, discount tokens, etc.

OWASP Automated Threats, OAT-002 Token Cracking

Das OWASP-Projekt ordnet diesem Muster die Schwächen CWE-799 und CWE-837 zu (OWASP Automated Threats). Die erste beschreibt eine Anwendung, die Zahl oder Häufigkeit der Interaktionen mit einem Akteur nicht ausreichend begrenzt (MITRE CWE). Die zweite beschreibt eine Anwendung, die eine nur einmal zulässige Aktion nicht oder unzureichend durchsetzt (MITRE CWE). Beides trifft auf Gutscheine zu: Gegen das Raten hilft eine Frequenzbremse, gegen die Mehrfacheinlösung eine harte Einmalprüfung.

Der Angriffskatalog CAPEC beschreibt den Kern der Rechnung im Eintrag CAPEC-112: Entscheidend ist, wie schnell ein Angreifer den Raum möglicher Geheimnisse absuchen kann (MITRE CAPEC). Der Verteidiger muss dafür sorgen, dass Zeit und Aufwand dafür den Wert des Erbeuteten übersteigen (MITRE CAPEC). Für Rabattcodes heißt das: Der Zeichenraum muss groß genug sein, die Versuche müssen gebremst werden, und der Shop muss es bemerken, wenn trotzdem jemand sucht. In der Black Week wiegen diese drei Punkte schwerer als sonst. Viele Aktionen laufen parallel, Codes werden über Newsletter, Partner und soziale Kanäle verteilt, und ein auffälliger Verlauf geht im allgemeinen Lastanstieg leicht unter.

Vier Muster des Codemissbrauchs

Im Aktionszeitraum begegnen Shops vier Formen von Codemissbrauch. Sie unterscheiden sich in der Technik, haben aber eines gemeinsam: Jede einzelne Bestellung sieht für sich unauffällig aus. Sichtbar werden sie erst in der Summe, also in Zählern und Verläufen.

Durchprobieren

Ein Skript sendet Codes nach einem erkannten Muster an das Gutscheinfeld oder an die Warenkorb-Schnittstelle. Ziel sind gültige Einzelcodes aus großen Serien, etwa aus Newsletter- oder Partneraktionen.

Mehrfacheinlösung

Ein Code, der nur einmal gelten soll, wird mehrfach verrechnet: über mehrere Warenkörbe, parallele Anfragen oder einen Rücksprung im Checkout. Die Ursache liegt in der Prüflogik, nicht im Code.

Mehrfachkonten

Ein Neukundenrabatt wird über viele frisch angelegte Konten abgeholt. Jedes Konto ist formal neu, dahinter stehen dieselbe Person, dieselbe Anschrift oder dasselbe Skript.

Durchgesickerte Codes

Ein Code für eine geschlossene Zielgruppe taucht auf Gutscheinportalen oder in Foren auf und wird von allen eingelöst. Technisch ist das kein Angriff, wirtschaftlich wirkt es wie einer.

Die Abgrenzung zu verwandten Angriffen hilft, Alarme richtig zuzuordnen. Beim Card-Testing am Checkout prüfen Bots Kartendaten, nicht Codes; beim Account-Takeover geht es um fremde Kundenkonten. Die Werkzeuge ähneln sich, die Kennzahlen nicht: Für Codemissbrauch zählt, wie oft das Gutscheinfeld mit ungültigen Werten aufgerufen wird und wie sich eingelöste Codes über Konten, Anschriften und Herkunft verteilen.

Codelänge und Zeichenraum: die Rechnung vor der Aktion

Wie viel Schutz ein Code aus sich selbst heraus bietet, lässt sich vor der Aktion ausrechnen. Shopware erzeugt individuelle Aktionscodes wahlweise mit fester Länge oder nach einem eigenen Muster, in dem %s für einen zufälligen Buchstaben von A bis Z und %d für eine zufällige Ziffer von 0 bis 9 steht (Shopware-Dokumentation). Das Beispielmuster der Dokumentation, SW-%s%d%s%d%s-TEST, enthält fünf Zufallsstellen: drei Buchstaben und zwei Ziffern. Das ergibt 1.757.600 mögliche Codes (eigene Rechnung nach Shopware-Dokumentation).

Entscheidend ist eine zweite Größe: wie viele davon gültig sind. Ein Angreifer sucht nicht einen bestimmten Code, sondern irgendeinen der ausgegebenen. Bei 10.000 Codes einer Newsletter-Aktion ist im Mittel jeder 176. zufällige Versuch ein Treffer (eigene Rechnung nach Shopware-Dokumentation). Die Tabelle zeigt, wie sich das mit der Länge verschiebt – als eigene Rechnung mit 10.000 gültigen Codes und angenommenen 1.000 Versuchen je Sekunde ohne Bremse.

CodeaufbauMögliche CodesVersuche je Treffer bei 10.000 gültigen CodesZeit bis zum Treffer bei 1.000 Versuchen je Sekunde
Beispielmuster SW-%s%d%s%d%s-TEST: 3 Buchstaben, 2 Ziffern (Shopware-Dokumentation)1.757.600rund 176unter 1 Sekunde
8 Zeichen aus einem Satz von 32rund 1,1 Billionenrund 110 Millionenrund 31 Stunden
10 Zeichen aus einem Satz von 32rund 1,1 Billiardenrund 113 Milliardenrund 3,6 Jahre
12 Zeichen aus einem Satz von 32rund 1,2 Trillionenrund 115 Billionenrund 3.650 Jahre

Zwei Folgerungen ergeben sich daraus. Erstens darf aus einem kurzen Muster keine Serie mit tausenden Codes werden, ohne dass Zufallsstellen hinzukommen: Jeder zusätzlich ausgegebene Code macht das Raten leichter. Zweitens ersetzen auch zwölf Zeichen die Bremse nicht. Ein Code aus 12 Zeichen eines 32-Zeichen-Satzes trägt 60 Bit Zufall. Für Einmalcodes aus OTP-Generatoren, etwa Authentifizierungs-Apps, verlangt NIST unterhalb von 64 Bit ein Rate-Limit für Fehlversuche (NIST SP 800-63B). Ein Gutscheincode ist kein Login, die Logik dahinter passt trotzdem – zumal die Zahl der Versuche je Sekunde der Angreifer bestimmt, nicht der Shop.

Zeichensatz ohne Verwechsler

Für gedruckte, vorgelesene oder abgetippte Codes eignet sich ein Satz ohne leicht verwechselbare Zeichen: ohne 0 und O, ohne 1 und I. Aus 36 Buchstaben und Ziffern werden so 32 Zeichen, Kunden vertippen sich seltener, und das Monitoring muss weniger harmlose Fehlversuche von Angriffen trennen. Die Zufallsstellen stammen aus einem zugelassenen Zufallsgenerator, wie ihn NIST für Einmalgeheimnisse vorschreibt (NIST SP 800-63B), und nicht aus Zeitstempel, Bestellnummer oder fortlaufender Zählung.

Ein Rate-Limit direkt am Gutscheinfeld

Shopware bringt seit Version 6.4.6.0 Rate-Limits mit, die laut Entwicklerdokumentation das Risiko von Brute-Force-Angriffen auf Seiten wie Login oder Passwort-Reset senken (Shopware-Entwicklerdokumentation). Der Kundenlogin ist gestuft begrenzt: 10 Anfragen in 10 Sekunden, 15 in 30 Sekunden und 20 in 60 Sekunden (Shopware-Entwicklerdokumentation). Ein eigener Eintrag für Aktionscodes steht in der Liste der Standard-Limiter nicht.

Am nächsten kommt der Limiter für Warenkorbpositionen, denn ein Aktionscode wird im Warenkorb als Position geführt. Bei Anfragen über die Store-API setzt sich sein Zählschlüssel aus der Kennung der Position und der IP-Adresse zusammen, und bei einem Aktionscode ist diese Kennung der eingegebene Code selbst (Shopware-Quelltext). Wer jeden Versuch mit einem anderen Code unternimmt, beginnt damit jedes Mal bei einem frischen Zähler. Über das Gutscheinfeld der Storefront zählt er gar nicht: Der Warenkorbdienst reicht dort eine Anfrage ohne IP-Adresse weiter, und ohne Adresse überspringt die Route die Prüfung (Shopware-Quelltext). Für das Durchprobieren ist dieser Limiter also nicht gebaut, und eine eigene Bremse am Gutscheinfeld gehört in den Shop.

Das BSI verlangt im IT-Grundschutz für Webanwendungen ausdrücklich Schutz vor unerlaubter automatisierter Nutzung (BSI IT-Grundschutz) und zugleich, dass die Wirkung der Schutzmechanismen auf berechtigte Nutzer berücksichtigt wird. Für das Gutscheinfeld bedeutet das eine Bremse mit mehreren Zählern, die jeweils etwas anderes erfassen:

  • Je Warenkorb oder Sitzung: wenige Fehlversuche in kurzer Folge, danach eine wachsende Wartezeit. Echte Kunden vertippen sich ein- oder zweimal, nicht zwanzigmal in einer Minute.
  • Je Kundenkonto: dieselbe Grenze über mehrere Sitzungen hinweg, damit ein neuer Warenkorb den Zähler nicht zurücksetzt.
  • Je IP-Adresse und Netz: eine großzügigere Grenze, weil hinter einer Firmen- oder Mobilfunkadresse viele echte Kunden stehen können.
  • Über den ganzen Shop: ein Zähler aller Fehlversuche, der nicht bremst, sondern alarmiert. Er erkennt verteilte Angriffe, die jede Einzelgrenze unterlaufen.
  • Einheitliche Antwort: Die Meldung für einen unbekannten Code unterscheidet sich möglichst nicht von der für einen bereits eingelösten. Jede Unterscheidung verrät, dass ein Code existiert.

Der letzte Punkt folgt einem Prinzip, das derselbe BSI-Baustein am Beispiel von Konten beschreibt: Gibt eine Anwendung Auskunft über vorhandene Konten, lässt sich daraus eine Liste gültiger Konten erzeugen (BSI IT-Grundschutz). Bei Codes ist es dasselbe. Ist die Grenze erreicht, antwortet der Shop mit dem Statuscode 429, der laut RFC anzeigt, dass in einem Zeitraum zu viele Anfragen gesendet wurden (RFC 6585). Die Antwort darf einen Retry-After-Kopf mit der Wartezeit tragen. Der RFC hält auch fest, dass ein Server unter Angriff nicht jede Anfrage mit 429 beantworten muss, weil schon das Antworten Ressourcen kostet (RFC 6585). Bei massenhaften Versuchen aus einem Netz ist darum eine Regel in der Web Application Firewall die günstigere Stelle.

Fehlversuchsspitzen erkennen und melden

Eine Bremse ohne Messung bleibt stumm: Sie greift, aber niemand erfährt davon. Fehlversuche am Gutscheinfeld gehören darum als eigene Kennzahl ins Monitoring, aufgeteilt nach Minute, Verkaufskanal und Herkunft. Den Normalwert liefert der Shop selbst. In ruhigen Wochen bewegt sich die Zahl ungültiger Codeeingaben in einem schmalen Band, an Aktionstagen steigt sie mit den Besuchern. Der Alarm vergleicht deshalb nicht mit einer festen Zahl, sondern mit dem Verhältnis von Fehlversuchen zu Warenkörben.

Die OWASP API Security Top 10 nennen als Gegenmittel gegen automatisierten Zugriff auf sensible Geschäftsabläufe die Suche nach nicht menschlichen Mustern, etwa wenn zwischen „in den Warenkorb“ und „Kauf abschließen“ weniger als eine Sekunde liegt (OWASP API Security Top 10). Am Gutscheinfeld sehen solche Muster so aus: Versuche im Abstand von Millisekunden, Codes in alphabetischer oder numerischer Folge, viele Eingaben ohne einen einzigen Artikelwechsel und Anfragen ohne vorherigen Seitenaufruf. Ein erster Blick gelingt schon mit dem Zugriffsprotokoll des Webservers. Die Storefront nimmt Codes über die Route POST /checkout/promotion/add entgegen (Shopware-Quelltext):

gutscheinfeld-versuche.sh
#!/usr/bin/env bash
# Versuche am Gutscheinfeld je IP-Adresse und Minute aus dem Zugriffsprotokoll
# (Format "combined", Storefront-Route POST /checkout/promotion/add)
LOG="${1:-/var/log/nginx/access.log}"
SCHWELLE=20   # Versuche je Minute und Adresse, ab denen eine Zeile erscheint

awk -v s="$SCHWELLE" '$6 == "\"POST" && $7 ~ /^\/checkout\/promotion\/add/ {
  split($4, t, ":"); minute = t[2] ":" t[3]
  n[$1 " " minute]++
}
END { for (k in n) if (n[k] >= s) print n[k], k }' "$LOG" | sort -rn | head -20

Das Zugriffsprotokoll zeigt Versuche, aber nicht, ob ein Code gültig war. Für einen ersten Alarm reicht das: Wer in einer Minute zwanzig Codes ausprobiert, kauft nicht gewöhnlich ein. Den Ausgang jeder Eingabe kennt nur die Anwendung. Dort gehört ein eigener Protokolleintrag hin, der Zeitpunkt, Warenkorb, Konto und Ergebnis festhält, aber nicht den vollständigen Code. Gekürzt auf die ersten Zeichen bleibt er für die Mustersuche brauchbar und gibt im Protokoll keinen gültigen Code preis.

Die Schwelle kommt aus dem eigenen Verlauf

Eine feste Zahl aus dem Lehrbuch passt selten. Brauchbar ist der Verlauf der letzten Aktionswochen: das Verhältnis von Fehlversuchen zu Warenkörben je Stunde, dazu ein deutlich höherer Ausschlag als Alarmgrenze. Für die Woche um den Black Friday wird die Grenze enger gesetzt und die Bereitschaft verstärkt, weil dann jede Stunde Missbrauch mehr kostet als an einem gewöhnlichen Dienstag.

Wie Schwellen, Eskalation und Alarmmüdigkeit zusammenspielen, beschreibt der Beitrag zu Log-Monitoring und Alerting. Für das Gutscheinfeld genügt am Anfang eine Stufe für den Tagesbericht und eine für die sofortige Benachrichtigung.

Neukundenrabatt gegen Mehrfachkonten absichern

Der Neukundenrabatt wird am leichtesten mehrfach abgeholt, weil er an eine Eigenschaft geknüpft ist, die sich herstellen lässt. In Shopware prüft die Neukunden-Bedingung im Rule Builder, ob das Datum der ersten Anmeldung dem heutigen Datum entspricht; die Dokumentation kündigt ihren Wegfall an und empfiehlt stattdessen die Bedingung für die Zeit seit der ersten Anmeldung (Shopware-Dokumentation). Beide Bedingungen hängen am Kundenkonto. Ein neues Konto mit neuer E-Mail-Adresse ist für die Regel ein neuer Kunde.

Die OWASP API Security Top 10 beschreiben das Muster am Beispiel eines Empfehlungsprogramms: Ein Angreifer automatisiert die Registrierung, und jedes neue Konto schreibt ihm Guthaben gut (OWASP API Security Top 10). Für den Shop ist der wirtschaftliche Effekt derselbe, wenn ein Willkommenscode über viele Konten in Bestellungen an dieselbe Anschrift fließt. Gleichzeitig sind Rabatte ein Tausch gegen Daten, den viele Kunden bewusst eingehen: 56 Prozent der Online-Shopper sind bereit, ihre Daten für Rabatte zur Verfügung zu stellen (Bitkom). Der Neukundenrabatt bleibt also ein sinnvolles Werkzeug. Er braucht nur eine Prüfung, die über das Konto hinausreicht und mit Signalen arbeitet statt mit einem einzelnen harten Kriterium:

  • Normalisierte E-Mail-Adresse: Viele Postfächer nehmen Zusätze nach einem Trennzeichen wie „+“ an. RFC 5233 beschreibt dieses Subaddressing und weist darauf hin, dass die Kodierung anbieterspezifisch ist (RFC 5233). Bei Gmail-Adressen spielen Punkte keine Rolle, bei Gmail-Postfächern unter der eigenen Domain einer Organisation dagegen schon (Gmail-Hilfe). Die normalisierte Fassung dient nur dem Vergleich und ersetzt nicht die gespeicherte Adresse.
  • Liefer- und Rechnungsanschrift: dieselbe Anschrift in mehreren Neukundenbestellungen innerhalb der Aktion, auch mit abweichender Schreibweise von Straße oder Hausnummer.
  • Zahlungsweg: dasselbe Zahlungskonto hinter mehreren neuen Kundenkonten, soweit der Zahlungsdienst dafür eine wiederkehrende Kennung liefert.
  • Zeitliche Nähe: viele Registrierungen mit anschließender Codeeinlösung in kurzer Folge aus demselben Netz.

Ein Treffer bei einem dieser Signale ist ein Prüffall, kein Beweis. Familien teilen Anschriften, Kollegen ein Firmennetz. Sinnvoll ist deshalb eine Stufung: Die Bestellung geht ein, bei auffälliger Häufung wird der Rabatt vor dem Versand geprüft, und erst eindeutige Serien führen zu Maßnahmen nach den veröffentlichten Aktionsbedingungen. Diese Bedingungen legen vor dem Start fest, dass der Rabatt einmal je Person oder Haushalt gilt – ohne diese Festlegung fehlt später die Grundlage für jede Entscheidung.

Datenschutz bei der Missbrauchsprüfung

Fehlversuche, IP-Adressen und Adressabgleiche sind personenbezogene Daten. Erwägungsgrund 49 der DSGVO erkennt die Verarbeitung zur Gewährleistung der Netz- und Informationssicherheit als berechtigtes Interesse an, soweit sie dafür unbedingt notwendig und verhältnismäßig ist; ausdrücklich genannt sind dort unter anderem Betreiber von Kommunikationsnetzen und Anbieter von Sicherheitsdiensten (DSGVO, Erwägungsgrund 49). Für die Prüfung im Shop folgen daraus kurze Speicherfristen, gekürzte Codes im Protokoll und eine Auswertung, die nur so viel zusammenführt, wie der Missbrauchsnachweis braucht.

Wenn Codes auf Gutscheinportalen landen

Nicht jeder Missbrauch braucht einen Bot. Ein Code, der für den Newsletter gedacht war, kann kurz nach dem Versand auf Gutscheinportalen und in Schnäppchenforen stehen. Ab dann lösen ihn Besucher ein, für die er nicht gedacht war, und die Aktion kostet mehr als geplant. Technisch ist das kein Angriff, im Monitoring sieht es trotzdem nach einem aus: Die Einlösungen eines Codes steigen sprunghaft, neue Besucher kommen über fremde Verweise, und der Anteil der Bestandskunden unter den Einlösenden fällt.

Das wirksamste Gegenmittel ist die Wahl der Codeart. Shopware unterscheidet feste Aktionscodes, die für alle Kunden gleich sind, von individuellen Codes, die nur einmal eingelöst werden können und bei erneuter Eingabe abgelehnt werden (Shopware-Dokumentation). Feste Codes lassen sich über die Felder für die maximale Nutzung insgesamt und je Kunde begrenzen (Shopware-Dokumentation). Bei individuellen Codes gilt außerdem: Werden die Codes einer Aktion nachträglich angepasst und neu erzeugt, verlieren die bisherigen ihre Gültigkeit (Shopware-Dokumentation). Im Normalbetrieb ist das eine Falle, im Missbrauchsfall ein Werkzeug – vorausgesetzt, die berechtigten Empfänger erhalten danach neue Codes.

CodeartTypischer EinsatzRisiko in der Black WeekSchutz
Fester CodeBanner, Anzeige, soziale KanäleVerbreitet sich frei, Einlösungen ohne ObergrenzeGesamt- und Kundengrenze, kurze Laufzeit, Mindestbestellwert
Individueller CodeNewsletter, Kundenbindung, PartnerDurchprobieren der SerieGenug Zufallsstellen, Rate-Limit, Alarm bei Fehlversuchen
NeukundencodeRegistrierung, WillkommensmailMehrfachkontenSignale über das Konto hinaus, Prüfung vor dem Versand
KanalcodePartner, Kooperationen, AffiliateWeitergabe außerhalb des KanalsEigener Code je Kanal, Auswertung je Herkunft

Für die Erkennung lohnt der Blick auf die Herkunft der Einlösungen. Tragen eingelöste Codes eines Kanals plötzlich Verweise von fremden Seiten, oder lösen Konten ohne Newsletter-Anmeldung einen Newsletter-Code ein, ist der Code durchgesickert. Die Reaktion richtet sich nach dem Schaden: eine Gesamtgrenze setzen, den Code früher beenden oder ihn für neue Warenkörbe sperren und den berechtigten Empfängern einen Ersatz schicken.

Mehrfacheinlösung und gleichzeitige Anfragen

Ein Code, der laut Aktion einmal gelten soll, ist nur dann einmalig, wenn die Anwendung das an der richtigen Stelle prüft. Der OWASP Web Security Testing Guide nennt als Beispiel einen Shop, der einen Rabatt nur einmal je Transaktion erlaubt, und empfiehlt harte Kontrollen: den Code auf Datenbankebene ungültig setzen oder einen Zähler je Nutzer im Backend führen (OWASP Web Security Testing Guide). Eine Prüfung allein in der Oberfläche, im Warenkorb oder in einer zwischengespeicherten Antwort reicht dafür nicht.

Die zweite Schwachstelle ist die Gleichzeitigkeit. CWE-362 beschreibt eine Codefolge, die kurzzeitig exklusiven Zugriff auf eine gemeinsame Ressource braucht, während ein Zeitfenster bleibt, in dem eine parallel laufende Folge sie verändern kann (MITRE CWE). Übertragen auf Gutscheine: Zwei Bestellungen mit demselben Einmalcode werden im selben Moment abgeschlossen, beide prüfen „noch nicht eingelöst“, und beide erhalten den Rabatt. Wie eng dieses Fenster in einem konkreten Shop ist, hängt von Version, Erweiterungen und Datenbankeinstellungen ab. Prüfen lässt es sich nur im Test: auf der Staging-Umgebung mit parallel abgeschickten Bestellungen, nicht im Livebetrieb.

Dieser Test gehört in die Vorbereitung jeder größeren Aktion und nach jedem Update von Kern oder Aktionserweiterungen in die Regressionstests. Mit einem kleinen Skript lässt er sich beliebig oft wiederholen und zeigt, ob die Einmalprüfung unter Last hält, bevor echte Kunden sie in der Aktionswoche auf die Probe stellen.

Das Aktionsende sauber schließen

Manche Aktion endet auf dem Papier und läuft im Shop weiter. Shopware begrenzt eine Aktion über ein Gültigkeitsdatum von und bis und lässt sie über einen Schalter deaktivieren (Shopware-Dokumentation). Beides muss zum veröffentlichten Aktionsende passen, einschließlich der Uhrzeit. Steht in der Werbung „bis Montag, 23:59 Uhr“, muss das Gültigkeitsende genau diese Uhrzeit in der Zeitzone des Shops treffen. Nach dem Ende beginnt die Auswertung. Eine kurze Liste schließt die Aktion sauber:

  • Gültigkeitsende geprüft: Ein Testwarenkorb lehnt den Code nach Ablauf ab.
  • Für eine Folgeaktion eine neue Aktion angelegt, statt die alte samt alter Codes wieder zu aktivieren.
  • Einlösungen je Code, Konto und Lieferanschrift ausgewertet, Auffälligkeiten für die nächste Aktion notiert.
  • Fehlversuche am Gutscheinfeld auch nach dem Aktionsende beobachtet: Ein Anstieg zeigt Bots, die mit alten Codelisten weiterarbeiten.
  • Schwellen und Bereitschaft auf den Normalbetrieb zurückgesetzt, Ausnahmen aus dem Änderungsstopp dokumentiert.

Fahrplan bis zum 27. November

Zwischen Mitte Oktober und dem Black Friday liegen sechs Kalenderwochen. Die Reihenfolge der Schritte folgt einer einfachen Logik: Erst wenn feststeht, welche Codes es gibt, lässt sich die Bremse bemessen, und erst wenn die Bremse steht, lässt sich der Alarm einstellen.

Alle geplanten Aktionen mit Codeart, Kanal, Laufzeit und erwarteter Zahl an Einlösungen erfassen. Laufende Daueraktionen und alte Codeserien prüfen und, wo nötig, schließen.

Wer erst in der Aktionswoche nachrüstet, ändert den Shop in einer Zeit mit hohem Umsatz und knappem Personal. Die Vorbereitung im Oktober braucht dagegen vor allem Planung und Tests auf der Staging-Umgebung.

Was die Wartung dabei übernimmt

Für Shopbetreiber ist Codemissbrauch selten das tägliche Thema. Ohne eigene Kennzahl fällt er darum leicht erst in der Monatsauswertung auf, wenn die Marge der Aktion schon fehlt. In einem Wartungsvertrag gehört er zum laufenden Betrieb: Unser Monitoring wertet Webserver- und Anwendungsprotokolle auf kritische und verdächtige Zugriffsmuster aus, die Alarmschwellen werden individuell für den Shop eingestellt, und für Black Friday und das Weihnachtsgeschäft verkürzen wir Prüfintervalle, setzen Schwellen enger und erweitern die Bereitschaft.

Die Abwehr auf Netzebene ist Teil der Sicherheitsupdates: Wir konfigurieren und pflegen WAF-Regeln, prüfen Updates vorab auf Staging einschließlich Checkout und ziehen Schutzmaßnahmen nach, wenn ein neues Angriffsmuster auftaucht. Eine eigene Bremse in der Anwendung erweitert den Funktionsumfang und wird deshalb als eigenes Projekt angeboten; die Shopware-Wartung prüft sie danach bei jedem Update mit. Reaktionszeiten und Bereitschaft in der Aktionswoche regelt der SLA-Wartungsvertrag.

Kennzahl statt Bauchgefühl

Fehlversuche am Gutscheinfeld je Minute und Herkunft, verglichen mit dem Verlauf der Vorwochen.

Schwellen für die Aktionswoche

Engere Alarmgrenzen und erweiterte Bereitschaft rund um Black Friday und Cyber Monday.

Prüfung nach Updates

Einmalprüfung und Bremse gehören nach Updates von Kern und Erweiterungen in die Tests auf Staging.

Kommt ein Angriff trotzdem durch, beginnt der Ablauf aus dem Notfall-Support: Code sperren, Bremse verschärfen, Einlösungen sichten und betroffene Bestellungen vor dem Versand prüfen. Einen Überblick über alle Bausteine der Betreuung gibt die Seite Leistungen.

Dieser Artikel basiert auf Daten aus: OWASP Automated Threats to Web Applications (OAT-002 Token Cracking); OWASP Web Security Testing Guide (WSTG-BUSL-05); OWASP API Security Top 10 (API6:2023); MITRE CWE (CWE-799, CWE-837, CWE-362); MITRE CAPEC (CAPEC-112); NIST SP 800-63B-4; IETF RFC 6585 und RFC 5233; BSI IT-Grundschutz-Kompendium, Baustein APP.3.1 (Edition 2023); Shopware-Dokumentation (Promotions, Rule Builder); Shopware-Entwicklerdokumentation (Rate Limiter); Shopware-Quelltext (CartItemAddRoute, CartService, PromotionItemBuilder, CartLineItemController); HDE; Bitkom; DSGVO, Erwägungsgrund 49; Gmail-Hilfe. Die Rechenbeispiele zu Codelänge und Zeichenraum sind eigene Berechnungen.

Verwandte Artikel

Wartung & Updates

WordPress-Sicherheit 2026: Härtung und Updates

WordPress absichern 2026: Core-Härtung, Plugin-Sicherheit, Brute-Force-Schutz, Web Application Firewall und Security-Monitoring im Praxis-Leitfaden.

13 Min. Lesezeit
Monitoring & Notfall

Cache-Drift im Shop: alte Preise, fremde Warenkörbe

Seiten-, Objekt- und Auslieferungs-Cache laufen auseinander: Der Shop zeigt einen Preis, die Kasse rechnet einen anderen. Wie sich Drift messen und abstellen lässt.

16 Min. Lesezeit
Monitoring & Notfall

Wenn die Platte voll läuft: Shop-Speicher überwachen

Eine volle Datenpartition erzeugt keinen Ausfall, sondern hängende Bestellungen. Welche Verzeichnisse wachsen, welche Schwelle greift, welcher Turnus hilft.

14 Min. Lesezeit