Прячем e-mail от спамеров (Java Script)
Пример простейшей функции прячущей почтовый адрес от ботов собирающих 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 с тем же ключом с инкрементом.