Не секрет, что, размещая в открытом виде на сайтах свои e-mail и icq адреса, мы рискуем попасть в списки спамеров и стать получателями нежелательной информации. Как же защитить информацию от ботов, в то же время сделав ее доступной для рядовых пользователей? Для этого существует множество способов. В этой статье будут рассмотрены два из них:
Защита с помощью размещения текста на изображении
Защита с помощью JavaScript
Рассмотренные примеры, однако, не претендуют на полноту охвата затронутой проблемы, и при необходимости могут быть легко дополнены для соответствующего использования.

Предположим, нам нужно разместить номер icq и контактный e-mail. Пишем следующий код:

HTML
Текст

  1. // Строка с e-mail адресом
  2. $email="E-mail: user@site.ru";
  3. // Строка с ICQ
  4. $icq="ICQ: 123456";
  5. // Создаем изображение с помощью библиотеки GD шириной 200 и высотой 30 пикселей
  6. $im = imagecreate(200, 30);
  7. // Задаем белый цвет (для фона)
  8. $bg = imagecolorallocate($im, 255, 255, 255);
  9. // Задаем черный цвет для шрифта
  10. $black = imagecolorallocate($im, 0x00, 0x00, 0x00);
  11. // Задаем размер шрифта
  12. $size=4;
  13. // Делаем белый цвет прозрачным
  14. imagecolortransparent($im,$bg);
  15. // Наносим надписи на изображение
  16. imagestring($im,$size,0,0,$email,$black);
  17. imagestring($im,$size,0,15,$icq,$black);
  18. // Посылаем браузере заголовок о выводе изображения
  19. header('Content-type: image/png');
  20. // Выводим изображение в формате PNG
  21. imagepng($im);

Сохраняем полученный файл, допустим, как img_contacts.php, а в нужном нам документе вызываем так:

HTML
Текст

  1. img src='img_contacts.php' border='0' alt='Контактная информация'

Так как изображение прозрачно, его можно размещать поверх любого фона.

Защита с помощью размещения текста на изображении:
Идея такая - на стороне сервера разбиваем защищаемую строку (это может быть просто текст, а может быть и HTML код) на случайные кусочки. Затем создаем JavaScript, в котором будет некоторое число переменных со случайными именами. Каждая такая переменная содержит кусочек исходного текста. Объединяем их в одну строку и выводим с помощью document.write().
Код выглядит следующим образом:

HTML
Текст

  1. // Функция генерации случайного набора символов
  2. function rnd_string() {
  3.    // Из каких символов будет собирать строку
  4.    $textCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  5.    // Переменная для хранения строки
  6.    $string = "";
  7.    // Выбираем случайную длину от 5 до 10
  8.    $stringLength=mt_rand(5,10);
  9.    // Составляем строку
  10.    while(strlen($string) < $stringLength) {
  11.    $string .= substr($textCharacters, mt_rand(0,strlen($textCharacters)-1),1);
  12.    }
  13.    return $string;
  14.    }
  15. // Защищаемая строка, в нашем случае - HTML код контакной информации
  16. $contact_info='E-mail:<a href="mailto:user@site.ru">user@site.ru
  17. ICQ: 123456';
  18. // Максимальное число кусочков, из расчета что в минимальном по длине содержится 3 символа
  19. $max_slices=ceil(strlen($contact_info)/3);
  20. // Создаем массив, содержащий случайные имена переменных JavaScript
  21. for($i=0;$i< $max_slices;$i++) {
  22.    $rnd_strs[$i]=rnd_string();
  23.    }
  24. // Переменная для хранения защитного скрипта
  25. $antispam="<sсript language='JavaScript'>";
  26. // Текущее число символов, выбираемых из защищаемой строки
  27. $current=0;
  28. // Начальная позиция, с которой выбираем $current символов в цикле
  29. $last=0;
  30. // Разделяем защищаемую строку на случайные кусочки
  31. for($i=0;$i< $max_slices;$i++) {
  32.    // Случайное число символов
  33.    $current=mt_rand(3,7);
  34.    // Отделяем от исходной строки
  35.    $temp=substr($contact_info,$last,$current);
  36.    // Добавляем к выходному коду
  37.    $antispam.=$rnd_strs[$i]."='".$temp."';";
  38.    // Для следующей итерации цикла сохраняем значение конца текущего снятого куска исходной строки
  39.    $last=$last+$current;
  40.    }
  41. // Код JavaScript для вывода в браузер
  42. $antispam.="document.write(";
  43. // Код JavaScript для объединения строк
  44. for($i=0;$i<$max_slices;$i++) {
  45.    $antispam.=$rnd_strs[$i]."+";
  46.    }
  47. $antispam.="'');n//->";
  48. // Выводим в браузер
  49. echo $antispam;


Постоянные ссылки

При копировании ссылка на TeaM RSN обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.