Основное

» Linux Docker 0.9 - краткое практическое руководство
Установка, настройка, запуск, основные моменты работы.

» Изучаем CGroups
Практический подход к изучению подсистемы ядра Linux

» db2dhcp - DHCP сервер на SQL СУБД
Сборка из исходников, настройка БД, запуск.

Последние записи

» Отличия синтаксиса C++ & Java и некоторые особенности Java
В рамках "заметок на полях" - краткий, очень поверхностный и слабо структурированный набор различий в...

» Восстановление старых разработок
Старые проекты по которым планируется восстановить работы

» Linux Docker 0.9 - краткое практическое руководство
Установка, настройка, запуск, основные моменты работы.

Прячем e-mail от спамеров (Java Script)

11 марта 2014

Пример простейшей функции прячущей почтовый адрес от ботов собирающих e-mail адреса, но делающий его доступным настоящим людям смотрящим сайт через браузер. Вроде бы вполне надёжно работает:

<noscript>
[Anti-Spam protection: please enable Java Script in your browser]
</noscript>
<script language=javascript>
<!--
function gen_addr(addr, salt)
{
    var arr_addr = addr.split(",")
    for(var i = 0; i < arr_addr.length; ++i)
    {
        arr_addr[i] = String.fromCharCode(arr_addr[i] ^ salt)
        ++salt
    }
    return arr_addr.join("")
}

addr = gen_addr(
    "146,174,175,162,170,134,174,135,169,187,190,174,160,227,167,162", 
    3 << 6);
document.write("<a href='mailto:", addr, "'>", addr, "</a>");
//-->
</script>

Очевидно, что первым параметром в gen_addr(), нужно передать уже зашифрованный (примитивным XOR'ом с инкрементом) почтовый адрес. Проще всего зашифровать его например так:

$ echo "my-secret-address@domain.org" | perl -e '$s=3<<6; $a=<>; chomp $a;
@a=split(//,$a); map{$_=ord($_) ^ $s; ++$s} @a; $"=","; print "@a\n"'
173,184,239,176,161,166,180,162,188,228,171,175,168,191,
171,188,163,145,182,188,185,180,191,185,246,182,168,188

Важно: значение передаваемое в переменную $s=3<<6 разумеется должно совпадать со вторым аргументом передаваемым функции gen_addr() в JavaScript коде.

Принцип "шифрования/дешифрования" прост - получаем коды символов почтового адреса, применяем к ним двоичное XOR, после чего инкрементируем значение ключа на единицу. Результат записываем в виде строки полученных кодов соединённых через запятую. При дешифровании выполняется разделение шифрованной строки на коды и применение к ним XOR с тем же ключом с инкрементом.


comments powered by Disqus