Email címek elkódolása az email-ekbe helyezett linkekben

2022.11.02 — Posted by Webb & Flow


Az email címeket érdemes elkódolva berakni a linkekbe abban az esetben, ha a cél oldalon meg akarjuk akadályozni azt, hogy bárki bármilyen email címet beírva az url-be más nevében tudjon megtenni valamit (például email listára fel/leiratkozás, stb).

Emiatt a ForwardHub be tudja a címzett email címét egy elkódolt formában rakni az emailekbe. A kódoláshoz szükség van egy kulcsra, aminek a segítségével készíti a kódot.

Ez a kódolás az aláírásos elvet követi, ami azt jelenti, hogy maga az email cím visszafejthető a kódból, azonban a kód tartalmaz egy aláírást is, amit csak abban az esetben lehet helyesen létrehozni, ha ismerjük a kulcsot.

Kulcs beállítások

A kulcsot a Config / Project setting menü alatt lehet a Technical fülön beállítani:

A rendszer mindenképpen generál egy alapértelmezett kulcsot a projekthez, azonban ezt érdemes megváltoztatni. A kulcs formátumára nincs megkötés, azonban érdemes a következő elveket betartani:

  • minimum 16 karakter hozzú
  • tartalmaz több nagybetűt
  • tartalmaz több kisbetűt
  • tartalmaz több számot

Fontos, hogy ez a kulcs ne kerüljön illetéktelenek kezébe, és csak azok ismerjék, akiknek feltétlenül szükségük van rá.

Template beállítások

A template-ekbe egyszerűen a {TARGETHASHED} változót kell a {TARGET} helyére írni akkor, ha az elkódolt értéket akarjuk a levélbe rakni az adott helyen.

Kód ellenőrzése

Mivel a cél az, hogy csak olyan tudjon egy adott email címhez egy kódot generálni, aki ismeri a kódoló kulcsot, ezért annak a rendszernek, ami megkapja a kódot (például egy url query paraméter formájában), tudnia kell validálnia a kapott kódot. Ehhez az adott rendszernek is ismernie kell a kódoló kulcsot.

A következő, PHP nyelven írt példa kód megmutatja az algoritmust, amivel ezt meg lehet tenni:

// az email kód az emailHash query paraméterben jön: https://example.com/index.php?emailHash=123456
// a kódoló kulcs a $salt változóban található

$salt = 'ezEgyEmai1K0d0l0Ku1cs';

$emailHash = $_GET['emailHash'];
$email = base64_decode(substr($emailHash, 32));
$md5Hash = md5($email.'{'.$salt.'}');
$isValid = ($md5Hash == substr($emailHash, 0, 32));

Kód generálása

Amennyiben bármi miatt szükség van külső rendszerben is ennek a kódnak a generálására, a következő, PHP nyelven írt kód alapján meg lehet azt tenni:

// a kódoló kulcs a $salt változóban található
// a kódolandó email a $email változóban található

$salt = 'ezEgyEmai1K0d0l0Ku1cs';
$email = 'email@example.com';

$emailHash = md5($email.'{'.$salt.'}').base64_encode($email);