Не секрет, что, размещая в открытом виде на сайтах свои e-mail и icq адреса, мы рискуем попасть в списки спамеров и стать получателями нежелательной информации. Как же защитить информацию от ботов, в то же время сделав ее доступной для рядовых пользователей? Для этого существует множество способов. В этой статье будут рассмотрены два из них:
Защита с помощью размещения текста на изображении
Защита с помощью JavaScript
Рассмотренные примеры, однако, не претендуют на полноту охвата затронутой проблемы, и при необходимости могут быть легко дополнены для соответствующего использования.
Предположим, нам нужно разместить номер icq и контактный e-mail. Пишем следующий код:
// Строка с e-mail адресом $email="E-mail: [email protected]"; // Строка с 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:[email protected]">[email protected] 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 обязательна!
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.