LW IT Solutions
« Blog-Übersicht /Digital Marketing / Hashing in der Conversions API: Kundendaten vor...
Diesen Artikel in anderen Sprachen lesen:

Hashing in der Conversions API: Kundendaten vor SHA-256 normalisieren und welche Felder ungehasht bleiben

Hashing in der Conversions API: Kundendaten vor SHA-256 normalisieren und welche Felder ungehasht bleiben
Inhalt
  1. Warum ein kleiner Unterschied ein vollständiger ist
  2. Die Form, in der jeder Parameter stehen muss
  3. Die Parameter, die nicht gestreut werden dürfen
  4. Wie sich das von außen zeigt
  5. Wohin die Normalisierung gehört
  6. Fragen und Antworten
  7. Quellen

Ein Conversions-API-Ereignis mit einer gestreuten E-Mail-Adresse sieht gleich aus, ob richtig oder falsch gestreut wurde. Die Nutzlast ist gültig, die Schnittstelle antwortet mit einem Erfolg, der Ereigniszähler steigt, und die Übereinstimmungsgüte bleibt, wo sie war – weil die Adresse, korrekt zu einer Zeichenkette gestreut, die keiner entspricht, mit einem Kundenbestand verglichen und in keinem gefunden wurde.

Das ist die Art des Scheiterns, die vor aller Verrohrung verstanden sein sollte: Streuen scheitert nicht laut, es scheitert, indem es etwas hervorbringt, das technisch einwandfrei und inhaltlich leer ist.

Dieselbe E-Mail-Adresse zweimal gestreut: einmal beschnitten und kleingeschrieben, einmal so wie aus dem Formular, mit zwei völlig verschiedenen SHA-256-Werten, von denen nur einer zum gespeicherten Eintrag passt
Zwei echte SHA-256-Werte derselben Adresse. Drei Zeichen Leerraum und ein paar Großbuchstaben trennen sie.

Warum ein kleiner Unterschied ein vollständiger ist

Eine Streufunktion ist so gebaut, dass eine winzige Änderung der Eingabe eine bis zur Unkenntlichkeit verschiedene Ausgabe erzeugt. Diese Eigenschaft macht das Streuen brauchbar, und genau sie macht einen Normalisierungsfehler tödlich: Beinahe-Übereinstimmung gibt es nicht. Zwei Streuwerte sind gleich, oder sie haben nichts miteinander zu tun, und keine noch so unscharfe Zuordnung weiter hinten holt den Unterschied wieder ein.

Ob ein Ereignis eine Person findet, entscheidet sich also, bevor die Streufunktion überhaupt aufgerufen wird – in den wenigen Zeilen, die festlegen, was genau hineingeht.

Die Form, in der jeder Parameter stehen muss

Parameter Verlangte Form Was schiefgeht
em beschnitten, klein ein Großbuchstabe aus dem Formular, ein Leerzeichen aus der Zwischenablage
ph nur Ziffern, mit Ländervorwahl die nationale Null in +49 (0)170 überlebt
fn, ln klein, ohne Satzzeichen und Leerraum der Bindestrich in einem Doppelnamen
ct klein, ohne Leerzeichen Frankfurt am Main behält seine Leerzeichen
st, country zweibuchstabiges Kürzel, klein das Land steht ausgeschrieben da
ge genau f oder m alles andere, gestreut als wäre es ein Wert
db JJJJMMTT ein landesübliches Datumsformat, lautlos umsortiert

Die Telefonnummer verdient eine eigene Anmerkung, denn sie ist der eine Fall, der sich nicht maschinell normalisieren lässt. Aus +49 (0)170 1234567 alle Nichtziffern zu entfernen ergibt 4901701234567, und die Null hinter der Ländervorwahl ist eine nationale Vorwahlkennziffer, die in einer internationalen Nummer nichts zu suchen hat. Keine Regel entscheidet das für jedes Land verlässlich, weshalb die ehrliche Behandlung darin besteht, zu entfernen und das verdächtige Muster einem Menschen zu melden, statt zu raten.

Die Parameter, die nicht gestreut werden dürfen

Der umgekehrte Fehler ist seltener und ebenso endgültig. client_ip_address, client_user_agent, fbp und fbc werden im Klartext gesendet. Sie sind keine Kennungen in dem Sinn, in dem die gestreuten Felder es sind; sie sind Werte, die Meta gegen die eigenen Aufzeichnungen hält, und ein gestreuter davon ist eine Zeichenkette, der auf der anderen Seite nichts entspricht.

Am häufigsten passiert das, wenn eine Streuhilfe auf das gesamte Nutzerdatenobjekt auf einmal angewandt wird – ein vernünftig aussehendes Stück Code, das in genau vier Feldern falsch ist. Eine Hilfe, die nach Feldnamen streut statt nach Objekt, ist die Fassung, die eine Schemaänderung übersteht.

Wie sich das von außen zeigt

# dieselbe Adresse, drei Wege
"  Max.Mustermann@Example.COM "   → 524d6368ceb086b2b1d8fed14ee75313…
"  max.mustermann@example.com "   → de4c5edc5348280eedb5b029d7851764…
"max.mustermann@example.com"      → dd432348e6c3373c5f646913fa94ae79…

# verglichen wird nur der dritte mit irgendetwas

Keiner davon erzeugt einen Fehler. Die Ereigniszahl im Ereignismanager ist in allen drei Fällen gleich, die Zustellung wird in allen drei Fällen bestätigt, und die einzige Größe, die sich bewegt, ist die Übereinstimmungsgüte – nach unten, langsam, und auf eine Weise, die sich bequem der Jahreszeit oder einer Änderung an der Einwilligung zuschreiben lässt.

Die brauchbare Prüfung ist deshalb nicht die Antwort der Schnittstelle, sondern ein Vergleich gegen einen bekannten Wert. Eine Adresse aus dem Kundenbestand nehmen, sie so streuen, wie der Shop es tut, sie so streuen, wie die Vorschrift es verlangt, und die beiden Zeichenketten vergleichen. Sie stimmen überein, oder die Verarbeitungskette hat einen Normalisierungsfehler – und die Antwort dauert eine Minute.

Wohin die Normalisierung gehört

Die letzte Entscheidung ist eine des Aufbaus. Normalisieren lässt sich im Browser, im Servercontainer oder in dem System, das den Kundeneintrag führt – und nur das letzte hat den ursprünglichen Wert in der Form vorliegen, in der ihn auch der Kundenbestand hält.

Es im serverseitigen Container zu tun, ist der übliche Mittelweg und trägt, sofern der Container den Rohwert bekommt und nicht etwas, das ein Formular bereits zugerichtet hat. Es im Browser zu tun, ist die eine Anordnung, die zu vermeiden ist: Sie legt die Adresse im Klartext in eine Anfrage, die das Gerät des Besuchers verlässt – genau das, was das Streuen verhindern sollte.

Fragen und Antworten

Macht das Streuen die Kundendaten datenschutzrechtlich anonym?

Nein. Ein Streuwert, den Meta mit dem eigenen Kundenbestand abgleichen kann, ist pseudonymisiert und nicht anonym, und pseudonymisierte Daten bleiben nach der DSGVO personenbezogen; die Zuordnung zu einer Person ist hier sogar der Zweck. Das Streuen verhindert, dass die Adresse im Klartext übertragen wird, ersetzt aber weder die Rechtsgrundlage noch die Einwilligung.

Was geschieht, wenn ein Wert auf dem Weg zu Meta zweimal gestreut wird?

Dasselbe wie bei einem Normalisierungsfehler: Die Nutzlast ist gültig, die Schnittstelle meldet Erfolg, und keine Person wird gefunden. Ein Streuwert eines Streuwerts ist wieder eine Zeichenkette aus 64 Hexadezimalzeichen, sieht also aus wie ein richtiger und entspricht doch keinem Eintrag auf der anderen Seite.

Der Fall entsteht dort, wo zwei Stufen je für sich vernünftig handeln. Das Shopsystem liefert die Adresse bereits gestreut an den Servercontainer, und ein Tag dort streut jedes Feld der Nutzerdaten noch einmal. Keine der beiden Stufen ist für sich falsch, erst die Kette ist es.

Die übliche Absicherung ist eine Prüfung vor dem Streuen: Besteht ein Wert bereits aus genau 64 Zeichen aus 0–9 und a–f, wird er durchgereicht statt erneut gestreut. Eine E-Mail-Adresse erfüllt dieses Muster nie, weil sie ein @ enthält, und eine Telefonnummer ebenso wenig, weil E.164 höchstens 15 Ziffern zulässt. Den Rest fängt der Vergleich gegen einen bekannten Wert ab, den der Artikel beschreibt, sofern er am Ende der Kette ansetzt, also an der Nutzlast, die tatsächlich an Meta geht, und nicht an einer Zwischenstufe.

Wie sind Postleitzahl und external_id zu behandeln, die in der Tabelle fehlen?

Die Postleitzahl (zp) wird gestreut und steht davor kleingeschrieben, ohne Leerzeichen und ohne Bindestrich: Aus der polnischen Postleitzahl 00-950 wird 00950, aus der niederländischen 1012 AB wird 1012ab. Für die USA verlangt Meta nur die ersten fünf Ziffern.

external_id ist eine eigene Kennung des Shops, etwa die Kundennummer. Meta empfiehlt das Streuen, verlangt es aber nicht. Entscheidend ist die Gleichheit: Wird die Kennung auch über das Pixel gesendet, muss sie auf beiden Wegen in derselben Form ankommen, gestreut oder nicht, denn sonst sind es für Meta zwei verschiedene Kennungen.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Erfahrungen aus der Praxis und Rückfragen zur Umsetzung sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

Artikel & Kategorien

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Data Privacy

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 58 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 37 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

SaaS & Internet Earning

Diese Rubrik per RSS verfolgen

Smart Home

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Alle 14 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen