Xpoint
   [напомнить пароль]

Как правильно указать email на странице?

2003-11-20 13:18:20 [обр] Андрей Новиков [досье]

Никак не могу выбрать оптимального способа указывать email на странице, чтобы его не крали грабберы. Условие одно - чтобы он копировался мышкой и без изменений вставлялся в почтового клиента. Ссылка mailto: не обязательно. Вариантов много:

  1. картинка
  2. яваскрипт
  3. левые символы и т.п.

Но ни один из них мне не нравится. Хочется что-то этакое text-only, но при этом неукрадываемое без исскуственного или человеческого интеллекта.

спустя 9 минут [обр] Дмитрий Попов [досье]

А чем такой вариант не нравится?

Копируется нормально. Правда появляются лишние пробелы, но любой почтовый клиент хватает его нормально (даже Web-интерфейс к mail.ru - проверенно)

спустя 11 минут [обр] Сергей Круглов [досье]

<div style="float:right">oint.ru</div>
<div style="float:right">novikov@xp</div>

?

спустя 6 минут [обр] Виталий Ульченков [досье]
Сергей, а Вы пробовали его потом скопировать?:) Во-первых, выделить очень сложно. Во-вторых, копируется так: "oint.runovikov@xp"
спустя 1 час 16 минут [обр] Александр Самойлов [досье]

да скрипом писать, и все

<div>
Email <script>document.write(super_crypto("JDHQKJHDFFJJ"))</script>
</div>

правда, мне интересно как скоро появятяс грабберы которые и javascript будут отрабатывать
написать такой несложно

спустя 14 минут [обр] Александр Самойлов [досье]
<span>samoilov</span><span style="display:none">botva</span><span>@</span><span style="display:none">botva</span><span>t-systems</span><span style="display:none">botva</span><span>.</span><span style="display:none">botva</span><span>ru</span>
спустя 3 часа 10 минут [обр] Сергей Круглов [досье]
Александр Самойлов[досье]
У меня в MSIE 5.5 копируется все подряд. А именно samoilovbotva@botvat-systemsbotva.botvaru
Или так и предусматривается?
спустя 1 час 44 минуты [обр] Сергей Чернышев AKA Drouk S. ;) [досье]

Андрей Новиков[досье]
А если уж делать наверняка, то без JavaScript не обойтись - все остальное еще хуже отрабатывает и по разному работает во всех браузерах.

Тут как-бы глобальная метафизическая проблема - если использовать то, что будет правильно отображаться и копироваться в как можно большем кол-ве браузеров, то в конце концов это будет приделано и к грабберу.

Кстати, display:none также легко отлавливается как и любой другой тэг.

Так что давай, Андрюха, агитирую лучше за addressafe ;))) - те кто не хотят - пусть показывают свой адрес картинкой :)))

спустя 15 часов [обр] Александр Самойлов [досье]

Сергей Чернышев AKA Drouk S. ;):
Нет, display:none отлавливается не легко, если поместить его в стиль, а обращаться через класс.
Стиль можно подключать отдельно. Использовать хитрый селектор для стиля и т.д.

Сергей Круглов:
Нет, не предусматривается. Может быть так.

<span>samoilov</span><noscript>botva</noscript><span>@</span>

Тэгов, которые бы не рисовали свое содержимое достаточно много (title, noframes, comment), но и отфильтровать их в роботе легко.

спустя 4 дня [обр] Денис Ибаев aka Dionys [досье]

можно использовать коды символов...

например строка "&#105;&#110;&#102;&#111;&#64;&#115;&#105;&#116;&#101;&#46;&#114;&#117;" нормально воспринимается браузерами как "info@site.ru" даже в якоре... т.е. можно писать так:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#110;&#102;&#111;&#64;&#115;&#105;&#116;&#101;&#46;&#114;&#117;">
&#105;&#110;&#102;&#111;&#64;&#115;&#105;&#116;&#101;&#46;&#114;&#117;
</a>
спустя 1 день 22 часа [обр] Сергей Чернышев AKA Drouk S. ;) [досье]
Кстати, на twiki.org из ivan@ivanov.ru делают ivan@ivanov_ANTISPAM.ru
спустя 11 часов [обр] Денис Ибаев aka Dionys [досье]
или так... mailto:ivan(at)ivanov.ru или ivan@ivanov.ru_NO_SPAM_PLEASE - второе копировать удобнее...
спустя 27 дней [обр] Дмитрий Котеров [досье]
А давайте спросим и мирового разума, существует ли в природе хотя бы один спам-граббер, который понимает JavaScript на нетривиальном уровне? Что-то мне сомнительно. Так что пройдет даже вариант с document.write, если строку формировать при помощи хитрых функций (например, брать ключ раскодирования из атрибута таблицы стилей, которая подгружается выше). Да вообще, на JavaScript, по-моему, самый лучший вариант. Непонятно, почему Андрей его так не хочет.
спустя 7 часов [обр] Андрей М. [досье]

думаю, что написать граббер, который понимает именно яваскрипт, не проблема - можно например воспользоваться каким-нибудь интерпретатором яваскрипта, каковых в природе много.
А вот граббер, который понимает DOM написать гораздо сложнее.
Поэтому, имхо, например

<a href="mail[sobaka]domain.com"
   onmouseover='this.href=this.href.replace(/\[sobaka\]/),"@"' />

надежнее, чем document.write(super_crypto("JDHQKJHDFFJJ"))

спустя 36 минут [обр] Максим Деркачев [досье]
Написать граббер-то легко, вопрос в том, есть ли уже стандартные универсальные вещи, которые интерпретируют JS на страничках для грабления почтовых адресов. Потому как если человек задастся целью стащить адреса именно с xpoint, то ему не составит труда написать регекс про [sobaka] и безо всякого JS-интерпретатора.
Более-менее успешно можно бороться только с тупыми универсальными грабберами, в этом случае любое более-менее неочевидное запутывание адресов даст результат, не надо и извращаться сильно. Но в том случае, когда граббер пишется именно под определенный механизм - вот тут нам и засада. Не обойтись без какого-то механизма шифрования, от случайных перестановок до чего-то более сложного. Но, в любом случае, если условие, что адрес может быть скопирован мышкой, значит он может быть украден, при достаточной мотивации.
спустя 1 час 45 минут [обр] Андрей М. [досье]

Максим Деркачев[досье]
Именно потому, что легко, я думаю что есть :) хотя точно сказать не могу

я как раз о том, что можно взять n веб-страниц (неважно каких) и для каждой тупо выполнить document.write там где он встречается, а потом уже искать в полученном результате емэйлы. Немного усложним граббер и если в аргументах document.write встречается какая-то функция, найдем ее в коде страницы и выполним - вот и все механизмы шифрования летят в трубу :-(

А помешать грабберу, заточенному под конкретный сайт по-моему вообще невозможно

спустя 3 часа 30 минут [обр] Dag [досье]

Можно сделать DB файл и туда запихивать злостных граберов.

<a href="email.htm(or feedback)">my E-Mail (@)</a>

email.htm

<html>
<head>
<title>@ My @ E-Mail @ (@ come, @ come here...) @</title>
</head>
<body>
<!-- optional: style: display:none and 
visible: hidden; -- not for human visitor !!!-->
<div id="doNotTouchThis">
<a href="ban_stupid_machine.htm">Please do not click on this link</a>
</div>
<a href="mailto:myReal@mail.com">myReal@mail.com</a>
</body>
</html>

As idea, human will not press on 'Don't click me!' but stupid bot wil.
email.htm(or feedback) is to be in the DIR /contact/ so — robot.txt "Disallow: /contact/"

спустя 46 минут [обр] Dag [досье]
Существует злостная страница ban_stupid_machine.htm — на которой скрипт и только (если по круче, email.htm также может быть страница с бан(рег)-скриптом... допустим не перм-бан). Берутся все data "посетителя", заносятся в DB файл и ему запрещается доступ к серверу (бан). Некоторые грабери даже не смогут вернуться на email.htm а некоторые смогут (если session для них не проблема и остальные трюки) но следующий раз... он же получил перм-бан потому что не туда зашел — значит плохой. И так с временем... их все меньше и меньше...
спустя 18 минут [обр] Алексей Волков, он же „Росомаха из Флориды“ [досье]

Dag[досье], а какая разница? Если граббер прошёл на запретную страницу и оказался в чёрном списке — это отключит в лучшем случае одну категорию роботов (если блокировать по User-Agent — что можно сделать и без таких ухищрений — см.соответствующий список материалов) или один IP-адрес. Более того, до того, как он пройдёт на запретную страницу, он уже успеет обработать немало других страниц с вашего сайта. В том числе и те, где лежит ваш адрес электронной почты. И пусть вы этого робота заблокируете, но адреса-то он уже получил, а больше вы ему и не нужны ни для чего.

Кроме того, вместе с роботами спамеров это отрубит доступ для вполне пристойных роботов, вроде поисковых машин или оффлайн-браузеров.

Поэтому spambot traps http://www.neilgunton.com/spambot_trap/ не слишком эффективны. Разве что развлечения ради.

спустя 2 часа 52 минуты [обр] Сергей Чернышев AKA Drouk S. ;) [досье]
А может забить на это дело и все email-ы только через формы посылать? И только регистрированным юзерам разрешать посылку и при хлоупотреблениях сильно ограничивать по кол-ву посланых email-ов или что-нибудь в таком духе.
спустя 19 минут [обр] Дмитрий Эсс [досье]
Сергей Чернышев[досье]
Так многие и делают. Это самая надёжная защита.
спустя 18 часов [обр] Давид Мзареулян [досье]

...или как XUL...

Вообще, мне кажется, стоило бы получше сформулировать задачу. Защита от "стандартных" ботов пишется просто — берётся любой из предложенных тут способов и, в меру фантазии, извращается. Стандартные боты наверняка обломятся. Но любая текстовая защита бессильна перед специальным, заточенным под данный сайт ботом. XPoint — штука довольно известная, и нельзя исключать того, что кто-то задастся целью прицельно ограбить именно его. А после такого грабежа мэйлы начнут гулять по разным спам-базам, и можно будет уже ничего не защищать — всё уже украдено.

Если хочется защититься и от спецботов, то тут есть только два варианта:

  1. Картинки. Я сам их использую, но при этом понимаю, что для того, чтобы распарсить картинку, которая используется в профилях XPoint-а (или у меня на сайте) не нужен даже FineReader. Фиксированный шрифт, безо всяких выкрутас... Т.е. спецбот пишется легко. Значит, надо всячески искажать картинку, но, ИМХО, при этом нормальным юзерам создаётся куда больше неудобств, чем спамботам.
  1. Вообще не светить на сайте адреса. Никакие, даже те, что упоминаются в текстах сообщений. Любое почтовое отправление совершать через форму. На XPoint-е есть понятие "друзья" — им можно адреса показывать (с согласия юзера), но больше никому.

Мне кажется, если в борьбе со спамом не произойдёт каких-либо капитальных прорывов, все коммьюнити-сайты рано или поздно перейдут на вариант 2.

спустя 13 часов [обр] Дмитрий Котеров [досье]
Значит, надо всячески искажать картинку, но, ИМХО, при этом нормальным юзерам создаётся куда больше неудобств, чем спамботам.

Ну, тут уж Ваша неправда: пользователю все равно, читать картинку, набранную одинаковым шрифтом, или же картинку, состоящую из буковок разного начертания и всячески искаженных.

Но вводить адреса с картинки очень неудобно. Я несколько раз тут этим занимался — могу сказать, всеьма противное занятие.

спустя 2 месяца 14 дней [обр] ddd [досье]
<A href="javascript:getToClipBrd()">Поместить email в буфер обмена</A>
Cколько-сколько там процентов?..
спустя 2 дня 6 часов [обр] Tony [досье]

Скорее-всего, я на ложном пути. Но предложу вариант, который отчасти использует уже предложенные способы. Минус способа — это опять-таки наличие JavaScript движка у граббера. Пояснения, думаю, излишни.

<script type="text/javascript">
<!--
  var encoded_email = 'encoded_email';
  function decode_email(encoded_email)
  {
    var res = encoded_email;
    // Тут следует кусок JavaScript-кода, составляемый сервером автоматически.
    // JavaScript-код расшифровывает зашифрованное мыло.
    // Алгоритм строится на основании оригинального мыла.
    // Мыло шифруется на стороне сервера по такому же алгоритму.
    // Итого -- для каждого случая алгоритм уникальный.
    // Остается дело за малым -- генерирование алгоритма шифрования ;).
    return res;
  }
  document.write('<a href="mailto:' + decode_email(encoded_email) + '">' + decode_email(encoded_email) + '</a>');
//-->
</script>
<noscript>
<img src="/image.php?encoded_email=<? echo $encoded_email ?>">
<noscript>

Вообще, теоретически невозможно составить 100% защиту. Все, что может увидеть человек, может увидеть и робот. Даже если зашумленными изображениями рисовать мыло, все-равно можно написать распознаватель образов. Другое дело можно затруднить грабеж. Сделать его "экономически-невыгодным". Это можно сделать скомбинировав как можно больше препятствий для грабберов.

спустя 11 часов [обр] Владимир Палант [досье]

Попробуем обойтись без обработчика onmouseover в каждой ссылке:

<script>
  function decodeEmail(e)
  {
    var target = e.target || e.srcElement;
    if (target && target.tagName.toLowerCase() == 'a' && target.href.match(/^mailto:/i))
      target.href = target.href.replace(/@nospam-/i, '@');
  }
</script>
...
<body onmouseover="decodeEmail(event)" onclick="decodeEmail(event)">
  ...
  <a href="mailto:abcd@nospam-xpoint.ru">abcd</a>
  ...
</body>

Протестировал только в IE 6.0 и Mozilla 1.6, других браузеров сейчас под рукой нет, но должно работать без проблем. Обработчик onclick нужен на тот случай, если кто-то выберет ссылку с клавиатуры.

спустя 14 часов [обр] Дмитрий Котеров [досье]

Владимир, какой кошмар Вы пишете...

<a href="mailto:abcd@nospam-xpoint.ru">abcd</a>
...
<script>
// В конец страницы.
function decodeEmail() {
  var del = "@nospam-";
  var p = this.href.indexOf(del);
  if (p < 0) return;
  this.href = this.href.substr(0, p) + '@' + this.href.substr(p+del.length);
}
for (var i=0; i<document.links.length; i++) {
  document.links[i].onmouseover = decodeEmail;
}
</script>

Если только я ничего не напутал, это будет работать везде вплоть до IE2. Кроме того, не надо код имеющихся страниц пакостить — достаточно засунуть скрипт в конец страницы (при желании можно и body.onload присвоить, да вот только я не уверен, что это будет достаточно кроссбраузерно). В любом случае, гадить в тэге body я считаю просто недопустимым.

спустя 3 часа 30 минут [обр] Владимир Палант [досье]
Дмитрий Котеров[досье]
"Гадить" в body не обязательно, я уже где-то приводил кросс-браузерный код добавления обработчиков событий из скрипта (да это и элементарно). А вот ходить по всем ссылкам как раз не следовало бы — при большом количестве ссылкок это затормозит загрузку страницы. Кроме того лучше всё-таки не трогать элементы страницы, пока страница не загрузилась — браузер не обязан предоставлять доступ к ним до загрузки, хоть в последних версиях всех распространённых браузеров и предоставляет. Ну и ещё ведь существует возможность, что пользователь нажмёт на ссылку до окончания загрузки — что он получит в вашем случае?
спустя 13 часов [обр] Tony [досье]
Да, можно и так, как Владимир Палант предлагает. Но в моем варианте есть одно "но". Я знаю, что некоторые "богатые" ресурсы грабят на мыло предварительно изучив алгоритм "замусоривания". Мой вариант с шифрованием без JavaScript-инетрпретатора сводит на нуль написание граббера под конкретный сайт. Кроме того, для верности можно строку, которая в "document.write" выводится, выводить кодами символов.
спустя 2 дня 19 часов [обр] AB... [досье]

А может проще подойти к данной задачи, но по принципу последних вариантов.
Например дать вариант сторки:

<a href="mailto:no@spam-xpoint.ru" title="user" onclick="...">

А все остальное по аналогии собирать скриптом.
no меняем на значение TITLE, а со spam- как и ранее указано, просто вырезаем.
TITLE понимают все бродилки.

спустя 7 месяцев [обр] Sergei Erjemin (webdragon) [досье]

Я делаю:

<a href="m&#197;ilto&#58;name&#64;domain&#46;ru>name&#64;domain#46;ru</a>

конечно половинчатый вариант, зато очень компактный по коду... а самое главное: спам пока не приходит.

спустя 25 дней [обр] lance10t [досье]

Sergei Erjemin (webdragon)[досье]

Я делаю:
href="m&#197;ilto&#58;name&#64;domain&#46;ru>name&#64;domain#46;ru</a
конечно половинчатый вариант, зато очень компактный по коду... а самое главное: спам пока не приходит.

я тоже использую нечто подобное.. и спама пока нету

<a href="mailto:%61dv%65%72%74&#115;%40&#102;%6f&#111;%64.c%61a&#100;ve&#114;t&#115;&#64;&#102;ood&#46;&#99;&#97;</a>

а браузеры зто хорошо понимают.

спустя 4 часа 46 минут [обр] Дмитрий Котеров [досье]

Можно в адресе соседние буквы местами переставлять при выводе не страницу, а на JS потом делать:

mail.replace(new window['RegExp']("(.)(.)", "g"), "$2$1");

Строчку 'RegExp' можете где-нибудь определить в таблицах стилей (или даже более извращенно) и вставлять динамически, чтобы даже робот, который умеет JS исполнять (таких, я думаю, пока не существует), ничего не смог сделать, не будучи браузером.

спустя 6 дней [обр] Alexander O [досье]

Дмитрий Котеров[досье]

чтобы даже робот, который умеет JS исполнять (таких, я думаю, пока не существует), ничего не смог сделать, не будучи браузером.

грозные враги: Win32::IE::Mechanize + Win32::API

Powered by POEM™ Engine Copyright © 2002-2005