Как защитить 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)