Защита e-mail

При разработке доски объявлений недвижимости я столкнулся с необходимостью обеспечить безопасность адресов электронной почты.

Для этого решил выводить электронные адреса в виде картинок, а mailto: реализовать с помощью javascript.

Вот так выглядит вывод адреса почты в коде страницы:

e-mail: <a href="" onclick="this.href='mailt'+'o:kdg'+'@aaanet.ru'"><img src="mail.php?m1=kdg&m2=aaanet.ru"></a>';

А это код, который формирует изображение с e-mail-ом:

// две части адреса
$m1=@$_GET['m1'];
$m2=@$_GET['m2'];
$m=$m1.'@'.$m2;

// размер встроенного шрифта 1..5
if(!isset($_GET['s']))$s=4;
else{
   $s=intval(@$_GET['s']);
   if($s<=0) $s=1;
   if($s>5)$s=5;
}

// коэффициенты подобраны эмпирическим путем
$im = imagecreate(($s+3.2)*1.2*strlen($m), ($s+3)*2.4);

// белый фон
imagecolorallocate($im, 255, 255, 255);

// синий текст
$textcolor = imagecolorallocate($im, 0, 0, 255);

imagestring($im, $s, 1, 0, $m, $textcolor);

header("Content-type: image/png");
imagepng($im);

Код, который формирует две переменные из которых будет собираться адрес электроннй почты:

if($row['mail']){ list($m1,$m2)=explode("@", $row['mail']);
  echo '<br>e-mail: <a href="" onclick="this.href=\'mailt\'+\'o:'.$m1.'\'+\'@\'+\''.$m2.'\'">
    <img src="mail.php?m1='.$m1.'&m2='.$m2.'"></a>';}

Эта защита не идеальная, но сильно осложняет жизнь хакеру. Для улучшения защиты можно предпринять следующие шаги:

  1. Полностью удалить из кода упоминание о e-mail. Это можно сделать с использованием технологии Ajax или с помошью обратимого шифрования и расшифровки на javascript.
  2. При формировании объявления сохранять изображение его E-mail на диск и ссылаться на него по имени файла.
  3. При формировании изображения делать смещение и наклон букв, т.к. уже существуют системы, которые разбирают каптчи. А это изображение не сложнее простейших каптч. Как вариант, полностью отказаться от изображения адреса почты, заменив его на символ почты или надпись "отправить письмо".
  4. Ну и для абсолютно параноидальной защиты электронной почты можно сделать форму отправки письма и отправлять его с помощью функции php mail. В этом случае ни отправитель, ни хакер никак не узнают адрес получателя.

.