Не секрет, что, размещая в открытом виде на сайтах свои e-mail и icq адреса, мы рискуем попасть в списки спамеров и стать получателями нежелательной информации. Как же защитить информацию от ботов, в то же время сделав ее доступной для рядовых пользователей? Для этого существует множество способов. В этой статье будут рассмотрены два из них:
Защита с помощью размещения текста на изображении
Защита с помощью JavaScript
Рассмотренные примеры, однако, не претендуют на полноту охвата затронутой проблемы, и при необходимости могут быть легко дополнены для соответствующего использования.
Предположим, нам нужно разместить номер icq и контактный e-mail. Пишем следующий код:
- // Строка с e-mail адресом
- $email="E-mail: user@site.ru";
- // Строка с ICQ
- $icq="ICQ: 123456";
- // Создаем изображение с помощью библиотеки GD шириной 200 и высотой 30 пикселей
- $im = imagecreate(200, 30);
- // Задаем белый цвет (для фона)
- $bg = imagecolorallocate($im, 255, 255, 255);
- // Задаем черный цвет для шрифта
- $black = imagecolorallocate($im, 0x00, 0x00, 0x00);
- // Задаем размер шрифта
- $size=4;
- // Делаем белый цвет прозрачным
- imagecolortransparent($im,$bg);
- // Наносим надписи на изображение
- imagestring($im,$size,0,0,$email,$black);
- imagestring($im,$size,0,15,$icq,$black);
- // Посылаем браузере заголовок о выводе изображения
- header('Content-type: image/png');
- // Выводим изображение в формате PNG
- imagepng($im);
Сохраняем полученный файл, допустим, как img_contacts.php, а в нужном нам документе вызываем так:
- img src='img_contacts.php' border='0' alt='Контактная информация'
Так как изображение прозрачно, его можно размещать поверх любого фона.
Защита с помощью размещения текста на изображении:
Идея такая - на стороне сервера разбиваем защищаемую строку (это может быть просто текст, а может быть и HTML код) на случайные кусочки. Затем создаем JavaScript, в котором будет некоторое число переменных со случайными именами. Каждая такая переменная содержит кусочек исходного текста. Объединяем их в одну строку и выводим с помощью document.write().
Код выглядит следующим образом:
- // Функция генерации случайного набора символов
- function rnd_string() {
- // Из каких символов будет собирать строку
- $textCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- // Переменная для хранения строки
- $string = "";
- // Выбираем случайную длину от 5 до 10
- $stringLength=mt_rand(5,10);
- // Составляем строку
- while(strlen($string) < $stringLength) {
- $string .= substr($textCharacters, mt_rand(0,strlen($textCharacters)-1),1);
- }
- return $string;
- }
- // Защищаемая строка, в нашем случае - HTML код контакной информации
- $contact_info='E-mail:<a href="mailto:user@site.ru">user@site.ru
- ICQ: 123456';
- // Максимальное число кусочков, из расчета что в минимальном по длине содержится 3 символа
- $max_slices=ceil(strlen($contact_info)/3);
- // Создаем массив, содержащий случайные имена переменных JavaScript
- for($i=0;$i< $max_slices;$i++) {
- $rnd_strs[$i]=rnd_string();
- }
- // Переменная для хранения защитного скрипта
- $antispam="<sсript language='JavaScript'>";
- // Текущее число символов, выбираемых из защищаемой строки
- $current=0;
- // Начальная позиция, с которой выбираем $current символов в цикле
- $last=0;
- // Разделяем защищаемую строку на случайные кусочки
- for($i=0;$i< $max_slices;$i++) {
- // Случайное число символов
- $current=mt_rand(3,7);
- // Отделяем от исходной строки
- $temp=substr($contact_info,$last,$current);
- // Добавляем к выходному коду
- $antispam.=$rnd_strs[$i]."='".$temp."';";
- // Для следующей итерации цикла сохраняем значение конца текущего снятого куска исходной строки
- $last=$last+$current;
- }
- // Код JavaScript для вывода в браузер
- $antispam.="document.write(";
- // Код JavaScript для объединения строк
- for($i=0;$i<$max_slices;$i++) {
- $antispam.=$rnd_strs[$i]."+";
- }
- $antispam.="'');n//->";
- // Выводим в браузер
- echo $antispam;
Постоянные ссылки
При копировании ссылка на TeaM RSN обязательна!
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.