Предотвратяване на спама. Маскиране на емайл адресите в HTML кода


Всеки се е сблъсквал със спама и знае колко изнервящо е да триеш по 30-40 нежелани писма на ден. От друга страна, оказва се, че това е един от най-успешните рекламни трикове, що се отнася до популяризирането на уебсайт. За това има цели организации, които се занимават с това.

Един от начините за откриване на валидни адреси за изпращане на спам е преглеждането на сорса на HTML страниците от специално пригодени ботове, с единствена цел да събират адреси. Затова е важно да се избягва директното изписване на адреси в кода. Тук ще нахвърляме няколко идеи как точно да стане това.

Задаване на несъществуващи домейни

Този начин е приложим, при положение, че давате пример за емайл адрес, например ако задавате стойност по подразбиране на поле във форма. Използвайте example.com, example.net, domain.com - всички тези домейни са забранени за регистрация и не водят никъде.

HTML маскиране

Идеята тук е да замените всеки един символ от адреса със съответното HTML entity. Ето примерна реализация с PHP:

<?php

function obfuscate_email_html($email)
{
    $return='';
    for($i=0; $i<strlen($email); $i++)
    {
        $return.='&#'.ord($email{$i}).';';
    }
    return $return;
}
?>

<a href="mailto:<?= obfuscate_email_html('mymail@example.com')?>"><?= obfuscate_email_html('mymail@example.com')?></a>

Този тип маскиране не е съвсем сигурен, тъй като процеса по декодиране на entity е доста лесен. Все пак това е най-добрия вариант, съвместим с всички браузъри.

Javascript маскиране

Тук вече изискваме задължително поддръжка на Javascript от баузъра, за да се изведе адреса. Тъй като ботовете оперират само с текст, те не могат да изпълнят скрипта и следователно да прочетат адреса.

Ето една реализация, която просто разделя името, домейна и знака '@' в различни променливи, които после извежда:

<?php

function obfuscate_email_js($email)
{
    $return='<script type="text/javascript" language="Javascript">';
    $return.='document.write(\'<a href="mailto:\'); ';
    $email_arr=explode('@', $email);
    $return.='a=\'@\'; b=\''.$email_arr[1].'\'; c=\''.$email_arr[0].'\'; ';
    $return.='document.write(c + a + b); ';
    $return.='document.write(\'">\'); ';
    $return.='document.write(c + a + b); ';
    $return.='document.write(\'</a>\'); ';
    $return.='</script>';
    return $return;
}

?>

<?= obfuscate_email_js('mymail@example.com')?>

Друга реализация е да се превърне всяка буква в нейния ASCII код, след което с Javascript да се върне обратно. Този метод е доста по-сигурен и може да се прилага за произволен текст:

<?php

function obfuscate_string_js($string)
{
    $char_arr=array();
    for($i=0; $i<strlen($string); $i++)
    {
        $char_arr[]=ord($string{$i});
    }
    $return='<script type="text/javascript" language="Javascript">';
    $return.='document.write(String.fromCharCode('.implode(', ', $char_arr).')); ';
    $return.='</script>';
    return $return;

}
?>

<?= obfuscate_string_js('<a href="mailto:mymail.example.com">mymail.example.com</a>')?>

Няма коментари

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-28 23:32:22