Hallo Günny,
Dieser Text sieht jedoch innerhalb der Mail nicht wirklich hübsch aus.
Wieso das?
Du schickst doch sicherlich eine HTML Mail, in der so etwas wie
<a href="https://example.org/buy_freezer.php?name=fritz&konto=DE1234567">
Bitte senden Sie mir mehr Informationen
</a>
steht. Der Kunde sieht nur den Klartext, die URL bekommt er je nach Mailprogramm nur zu Gesicht, wenn er über dem Link hovert.
Allerdings solltest Du Dir noch über die URL-Parameter Gedanken machen. Ein böser Mailempfänger könnte anfangen, Parametervariationen auszuprobieren, um auf diese Weise Schabernack anzurichten.
Einfache Lösung: Denk Dir einen geheimen Key aus, nicht zu kurz. Am besten pro Mailing einen eigenen. Wenn Du die Mail erzeugst, integriere in die URL einen signatur-Parameter, für den Du die Kundendaten sowie deinen geheimen Key hashst. Nicht md5 bitte, das ist zu kurz, PHP hat da kryptographisch besseres zu bieten. Eine Prise Salz ist auch nicht zu verachten. Wenn Du je Mailing eigene Keys verwendest, sollte die URL auch noch einen Parameter mit der Mailing-ID enthalten, damit Du weißt, welchen (intern bei Dir gespeicherten) Key Du verwenden musst.
Wenn der Kunde dann auf den Link klickt, kannst Du die erhaltenen Parameter erneut hashen und prüfen, ob sie mit dem Signatur-Parameter übereinstimmen.
Kompliziertere Lösung:** Generiere für jede Mail, die Du versendest, einen kryptographisch sicheren Zufallswert (PHP: Funktion random_bytes) und erzeuge einen genügend langen Hash (hash("sha256", $data)
liefert z.B. 64 Stellen). Diesen Hash verwendest Du als Schlüssel für einen Datenbanksatz, in dem Du dann die Daten speicherst, die Du derzeit noch an die URL anhängen möchtest. Vorsicht dabei: Eine Hash-Kollision ist sehr unwahrscheinlich, aber nicht unmöglich. D.h. der Insert in die Tabelle kann auf einen duplicate key laufen, und dann musst Du es mit einem anderen Zufallswert erneut versuchen.
Die URL, die Du in die Mail setzt, bekommt nur den Hash. Klickt der Kunde den Link, kannst Du über den Hash die Kundendaten aus der Datenbank lesen. Durch den langen Hash-Wert ist es nicht unmöglich, aber SEHR unwahrscheinlich, dass irgendwer per Durchprobieren einen anderen gültigen Hash findet. Für weitere Verwirrung der Hacker kannst Du sorgen, indem deine Antwortseite grundsätzlich immer "Danke schön, wir melden uns bei Ihnen" ausgibt, egal ob der Hash gültig war oder nicht.
Ein solcher Link sieht dann auch nicht allzu schlimm aus:
Lieber Kunde, wenn Sie weitere Informationen möchten, folgen Sie diesem Link:
https://example.com/buy_freezer.php?ref=f25a5473b85a5e35de2b80872f8e297b374e7de95e2cde31edd90828250c0ddd
Die Datenbanktabelle kannst Du dann auch gleich verwenden, um statistische Daten über Rücklaufquoten zu sammeln.
So, und ich hoffe, das sind wirklich KUNDEN von Dir, für die Du eine Kontakterlaubnis hast, und nicht der Plan für eine Spam-Kampagne.
Rolf
sumpsi - posui - obstruxi