Блог/Защита e-mail

Как защитить e-mail адреса от ботов в Modx

Автор: Кудашев Сергей

При создании сайта часто возникает необходимость указать на нем e-mail для связи. Если выложить e-mail без соответствующей защиты, то через пару дней или месяцев после индексации (это как повезет), вы начнете находить в почтовом ящике спам письма. Опять таки, если повезет, то они будут единичными, но, как правило, начинает приходить по 10-20 писем в день.

Как бороться с этой проблемой? Суть проблемы в том, что сайт посещается роботами (ботами), которые собирают почтовые адреса на сайтах. Нам надо сделать так, чтобы роботы не видели e-mail адреса, указанные на сайте.

Что мы можем сделать для сокрытия e-mail адресов? В Modx есть прекрасный механизм plugin, которым мы воспользуемся:

/**
* ObfuscateEmail plugin for MODx.
* By Aloysius Lim.
**/

function email_regex() {
	$atom = "[-!#$%&'*+/=?^_`{|}~0-9A-Za-z]+";
	$email_half = $atom . '(?:\\.' . $atom . ')*';
	$email = $email_half . '@' . $email_half;
	$email_regex = '<(' . $email . ')>';
	return $email_regex;
}

function replaceEntities($matches) {
	$address = html_entity_decode($matches[1]);
	$replaced = '';

	for ($i = 0 ; $i < strlen($address) ; $i++) {
		$char = $address[$i];
		$r = rand(0, 100);

		# roughly 10% raw, 45% hex, 45% dec
		if ($r > 90)
		{
			$replaced .= $char;
		}
		else if ($r < 45)
		{
			$replaced .= '&#x'.dechex(ord($char)).';';
		}
		else
		{
			$replaced .= '&#'.ord($char).';';
		}
	}

	return $replaced;
}

$modx->documentOutput = preg_replace_callback(email_regex(), "replaceEntities", $modx->documentOutput);
$modx->documentOutput = preg_replace_callback('/(mailto:)/', "replaceEntities", $modx->documentOutput);

Данный плагин вешается на событие OnWebPagePrerender, после чего он начинает обрабатывать вывод Modx, кодируя почтовые ящики в символы понятные браузеру. При этом боты, собирающие почту по сайтам, как правило, подобную перекодировку уже не воспринимают, а значит емейлы указанные на сайте не попадут в базу спамеров.

Внимание! Данный метод изменяет вывод данных, которые отдает Modx и бывают моменты, когда помимо e-mail адресов обрабатываются другие вставки, например скрипты вставленные shopkeeper. Поэтому, если у вас что-то вдруг не работает и в исходном коде страницы вы видите либо что текст чем то подменяется, либо в тексте появляются какие-то странные символы, то в первую очередь попробуйте отключить данный плагин.

Комментарии (0)