Ефективний метод приховування електронної пошти від спам-ботів


196

На своїй домашній сторінці я використовую цей метод, щоб приховати свою електронну пошту від спам-ботів:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

Що ви думаєте про це? Це ефективно? Які інші методи ви знаєте чи використовуєте?


Або це дублікат stackoverflow.com/questions/163628/… , або інший недійсний, оскільки це довгий список вікі, що не є спільнотою.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

5
У цьому є більше результатів, відповідей та поглядів. Його не слід закривати на користь того, щоб інший мав менше результатів, відповідей та поглядів.
абатищев

1
Я б закрив цього, щоб слідкувати за тим, що ця приваблює набагато більше.
абатищев

6
Найкраще рішення - не ділитися своїм рішенням . На жаль, це таке питання. Найкраще знайти своє рішення і тримати його при собі. Якщо хтось отримує стандартизацію, спам-боти будуть адаптовані для його подолання.
Димитріс

1
Найкращим рішенням є поєднання декількох наведених нижче рішень , наприклад, перша частина електронної пошти у вигляді зображення, друга частина this.href.replace(/x/g,''), третя частина, кодована шістнадцятковою версією тощо. Жоден спам-бот, яким би розумним не був, не намагатиметься використовувати різні способи розшифровки в різних частинах адреса електронної пошти.

Відповіді:


98

Це метод, який я використовував, з включеною стороною сервера, наприклад, <!--#include file="emailObfuscator.include" -->де emailObfuscator.includeміститься наступне:

<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
    function gen_mail_to_link(lhs,rhs,subject) {
        document.write("<a href=\"mailto");
        document.write(":" + lhs + "@");
        document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
    }
</script>

Для включення адреси я використовую JavaScript:

<script type="text/javascript"> 
    gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
  <em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>

Оскільки я отримую електронну пошту через Gmail з 2005 року, спам, як правило, не є проблемою. Отже, я не можу говорити про те, наскільки ефективний цей метод. Ви можете прочитати це дослідження (хоча воно старе), яке створило цей графік:

введіть тут опис зображення


Для чого потрібні включення на сторону сервера emailObfuscator.include? Чи не було б це так само, як писати це просто .html? (можливо, це просто приклад?) Також для чого ви використовуєте html-коментарі <!-- -->всередині скрипту? І нарешті, чому один ваш <script>тег є малі, а інші - великими <SCRIPT>? Чи допомагають ці методи плутати ботів чи щось таке?
Тамплієр

@Templar SSI не потрібен, і він не плутає ботів, наскільки я знаю. Це робить (зроблений) мій сайт модульним (насправді більше не використовуйте цей метод). У коментарі було посилання на джерело, де я знайшов хак (зараз зламане посилання). Зміна у випадку - це просто сміття. Якщо це плутає ботів, тим краще, але я сумніваюся, що це має якийсь ефект.
Фурманатор

4
Більш недавнє та повне дослідження, що досліджує ту саму ідею: grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Лукас Кімон

96

Робота зі вмістом та attr у CSS:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
<a href="#" class="cryptedmail"
   data-name="info"
   data-domain="example"
   data-tld="org"
   onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld; return false;"></a>

Якщо javascript відключений, просто подія клацання не працюватиме, електронна пошта все одно відображатиметься.

Ще одним цікавим підходом (принаймні, без події клацання) було б використання позначки справа наліво для зміни напрямку написання. докладніше про це: https://en.wikipedia.org/wiki/Right-to-left_mark


6
Для цього потрібно більше великих пальців.
heXer

Не знаю, чому, але, хоча це рішення виглядає досить вражаюче, воно не може запустити мій клієнт електронної пошти. Ось загадка
Рікардо

1
@RicardoZea який браузер ви використовуєте? ваша скрипка працює для мене чудово в хромі, тобто11, краю та
вогняного світла

3
Дивовижно. Але додайте "; return return" до події onclick. Це запобіжить потворне додавання # до URL-адреси веб-переглядачів (скасовуючи оригінальний href-посилання)
T4NK3R,

5
ЯК Я не можу вручну скопіювати (видиму) поштову адресу (в Chrome, Firefox чи Edge)?
T4NK3R

83

Погляньте на цей спосіб , досить розумний і використовуючи css.

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

Уведений вище CSS замінить напрям читання та подасть текст користувачеві у правильному порядку.

Сподіваюся, це допомагає

Ура


54
Це, безумовно, смішно. Але, на жаль, це не можна натискати і не працюватиме для копіювання / вставки, нехтуючи будь-яким браузером, який не є CSS, таким як зчитувачі шрифтів Брайля.
Ар'ян

Mhh приємно, але як тільки люди, які пишуть сканери, це бачать, стає марним.
Мав

6
Зіставлення зворотної адреси електронної пошти з RegEx настільки ж просто, як і відповідність неверненій. Спам - це мільярд доларів, і спамер навіть не використовує власні цикли процесора, щоб скребати екрани. Насправді вони вже прочитали цю розмову і відповідно скоригували свої методи. Боти можуть читати все, що читається на комп'ютері. Будь він виконаний CSS або JavaScript.
Jani Hyytiäinen

3
@ JaniHyytiäinen Я не згоден. Те, що вони не платять за процесор, не означає, що вони мають необмежені ресурси. Якщо запуск інтерпретатора JS виявиться занадто мало адрес за його вартість, вони відключать його.
o0 '.

1
@Lohoris: Google повідомляє про середній час завантаження сторінки (2,45 сек) та середній розмір сторінки (320 КБ), це дає вам уявлення про те, скільки ви можете аналізувати. Поки нитка для завантаження виконує запити, нитка розбору може зробити розбір. Більшість завантажень чекає. Що дає потоку dl можливість перевірити передумови, перш ніж вирішити надіслати його в парсер. Наприклад, сторінка візуалізації, indexOf ('@'), indexOf ('mailto:') тощо. Нитка для розбору отримає лише + -200 символів навколо матчу, що дозволило б настільки складний синтаксичний аналіз, що він 'здається' нескінченним у умови розбору потужності.
Jani Hyytiäinen

52

У мене зовсім інше сприймають це. Для цього я використовую MailHide .

MailHide - це система від Google, в якій користувачеві необхідно пройти тест reCAPTCHA, щоб потім виявити їм електронне повідомлення.


15
Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
showdev

5
Хоча я загалом погоджуюся з цим настроєм, у цьому випадку відповідь полягає у використанні певного інструменту. Якщо посилання все-таки перерветься, я видалю відповідь.
tvanfosson

Спасибі - Це чудово. Я пишу щось подібне (відкриваю посилання): Надішліть мені електронний лист:
розкрийте

6
Зауважте, що Google відключив MailHide станом на матч 2018 року. Як завжди у «безкоштовних» сервісах Google: вони пропонують їм, поки вони зможуть отримати прибуток від даних із них, і як тільки вони отримають те, що їм потрібно, скидають їх. Більшість ненадійних компаній пропонують безкоштовні послуги. Я б тримався подалі від служб Google або когось іншого, якщо вам потрібно передати все, що ви намагаєтеся зробити.
masi

51

Спочатку не моя ідея, але я не можу знайти автора:

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

Додайте стільки x, скільки вам подобається. Він прекрасно працює для читання, копіювання та вставки, і його неможливо прочитати ботом.


2
Акуратно! А як щодо користувачів мобільних пристроїв?
Бодзьо

Наведення миші також спрацьовує, коли ви торкаєтесь посилання. Це має добре працювати.
Ендрю Свіфт

4
Працює до тих пір, поки ваша адреса не містить жодних x. :-p Але я знаю, просто використовуйте інший лист.
Ден Хендерсон

1
Але тоді, якщо JavaScript відключений, ви представляєте користувачам неіснуючу адресу, яка відскакує, втрачаючи вас клієнта / користувача.
Xeevis

34
Якщо JavaScript відключений, жоден з моїх сайтів не працює взагалі ;-)
Andrew Swift

16

Я думаю, що єдиний бездоганний метод, який ти можеш мати, - це створити сторінку Contact Me, яка є формою, яка подає до сценарію, який надсилає на твою електронну адресу. Таким чином, ваша адреса взагалі ніколи не піддається впливу громадськості. Це може бути небажаним з якоїсь причини, але я думаю, що це досить хороше рішення. Мене часто дратує, коли я змушений копіювати / вставляти чиюсь електронну адресу зі свого сайту на мій поштовий клієнт і надсилати їм повідомлення; Я вважаю за краще це зробити через форму на їхньому сайті. Також такий підхід дозволяє надсилати вам анонімні коментарі тощо. Просто не забудьте захистити свою форму, використовуючи якусь анти-бот-схему, наприклад, капчу. Їх багато обговорюється тут на SO.


6
Єдина проблема з цим полягає в тому, що у вас немає копії надісланого вами повідомлення, якщо ви не знайдете час, щоб скопіювати і вставити його десь в іншому місці. Особисто я не проти копіювати та вставляти, але до кожного свого.
gvkv

6
Щодо відправника, який не має копії: для багатьох видів форм в Інтернеті я люблю варіант отримати копію сам. Однак часто такий варіант дозволяє зловживати анонімним надсиланням повідомлень майже комусь ...
Ар'ян

12
Це може приховати вашу електронну адресу, але це взагалі не зупинить спам, якщо ви не захистите свою форму скриптом перевірки зображення captcha.
СаймонДоудлз

1
Ви також можете вирішити проблему, коли відправник не має копії, включивши опцію надіслати її також їм.
steinybot

1
Опція "Надіслати копію собі" - ефективно перетворює форму в спам-канон, для вас як відправника - погана ідея!
T4NK3R


11

Якщо у вас є підтримка php, ви можете зробити щось подібне:

<img src="scriptname.php">

І scriptname.php:

<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email    =    "you@yourdomain.com";
$length    =    (strlen($email)*8);
$im = @ImageCreate ($length, 20)
     or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>

1
замість використання php ви могли фізично створити зображення. Як і у випадку з інвертуванням css, у вас все ще виникає проблема з тим, що його неможливо скопіювати, і його неможливо скопіювати, якщо ви не користуєтесь ручкою: P
Клавдіу,

9

Я знаю, що моя відповідь багатьом не сподобається, але, будь ласка, врахуйте моменти, викладені тут, перед тим, як натиснути.

Все, що легко читається машиною, буде легко читати спамерами. Хоча їхні вчинки здаються нам дурними, вони не дурні люди. Вони інноваційні та винахідливі. Вони не просто використовують ботів для збирання електронних листів, у них є безліч методів, а крім того, вони просто платять за хороший свіжий список електронних листів. Це означає, що вони отримали тисячі хакерів з чорної шапки по всьому світу, щоб виконати свою роботу. Люди готові кодувати зловмисне програмне забезпечення, яке викреслює екрани браузерів інших людей, що в підсумку робить будь-який метод, якого ви намагаєтеся досягти марним. Цю нитку вже прочитали 10+ таких людей, і вони нас сміються. Деякі з них можуть навіть нудьгувати до сліз, дізнавшись, що ми не можемо поставити перед ними нове завдання.

Майте на увазі, що ви врешті не намагаєтесь заощадити свій час, а час інших. Через це, будь ласка, подумайте провести тут трохи зайвого часу. Немає простої у виконанні чарівної кулі, яка б спрацювала. Якщо ви працюєте в компанії, яка публікує електронні листи 100 людей на сайті, і ви можете зменшити 1 спам електронну пошту на день на людину, ми говоримо про 36500 спам-листів на рік. Якщо видалення такої електронної пошти займає в середньому 5 секунд, ми говоримо про 50 робочих годин щорічно. Не кажучи вже про зменшену кількість роздратування. Отже, чому б не витратити на це кілька годин?

Не лише ви та люди, які отримуєте електронне повідомлення, вважають час корисним. Тому ви повинні знайти спосіб придушити адреси електронної пошти таким чином, щоб не виправдати її зламати. Якщо ви використовуєте якийсь широко використовуваний метод для придушення електронних листів, він справді окупається, щоб зламати його. Оскільки в результаті, зломщик отримає тисячі, якщо не десятки чи сотні тисяч свіжих електронних листів. І за них вони отримають гроші.

Отже, продовжуйте і кодуйте свій власний метод. Це рідкісний випадок, коли винахід колеса справді окупається. Використовуйте метод, який не є читабельним для машин, і той, який бажано вимагатиме деякої взаємодії з користувачем, не приносячи шкоди користувачеві.

Я витратив десь 20 хвилин, щоб кодувати приклад того, що я маю на увазі. У прикладі я використовував KnockoutJS просто тому, що мені це подобається, і я знаю, що ви, ймовірно, самі не будете використовувати його. Але це все одно не має значення. Це нестандартне рішення, яке не використовується широко. Розтріскування не призведе до нагороди за це, оскільки метод його роботи буде працювати лише на одній сторінці у величезному Інтернеті.

Ось загадка: http://jsfiddle.net/hzaw6/

Наведений нижче код не повинен бути прикладом хорошого коду. Але лише швидкий зразок коду, який машині дуже важко зрозуміти, ми навіть обробляємо електронні листи тут. І навіть якщо це вдасться зробити, стратити його не вдасться у великих масштабах.

І так, я знаю, що він не працює на IE = lte8 через "Неможливо отримати властивості" атрибутів "невизначених або нульових посилань", але мене просто не хвилює, оскільки це лише демонстрація методу, а не реальна реалізація, і не призначений для використання у виробництві таким, яким він є. Сміливо кодуйте свій власний, який крутіший, технічно більш міцний тощо.

О, і ніколи ніколи не називайте щось поштою чи електронною поштою у html чи javascript. Це просто занадто просто скребти DOM та об’єкт вікна на що-небудь з назвою пошти чи електронної пошти та перевірити, чи містить він щось, що відповідає електронній пошті. Ось чому ви не хочете, щоб будь-які змінні ніколи містили б електронну пошту в повному вигляді, і саме тому ви хочете, щоб користувач взаємодіяв зі сторінкою, перш ніж призначити такі змінні. Якщо ваша об’єктова модель javascript містить будь-які адреси електронної пошти у стані готовності до DOM, ви піддаєте їх дії спамерам.

HTML:

<div data-bind="foreach: contacts">
    <div class="contact">
        <div>
            <h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
            <ul>
                <li>Phone: <span data-bind="text: phone"></span></li>
                <li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
            </ul>
        </div>
    </div>
</div>

JS

function ViewModel(){
    var self = this;

    self.contacts = ko.observableArray([
        { firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
        { firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
        { firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
    ]);
    self.msgMeToThis = ko.observable('');
    self.reveal = function(m, e){
        var name = e.target.attributes.href.value;
        name = name.replace('#', '');
        self.msgMeToThis(name);
    };
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);

8

Один з моїх улюблених методів - це приховування адреси електронної пошти за допомогою php, класичний приклад - перетворення символів у значення HEX на зразок:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

І тоді у своїй розмітці я просто назву це так:

  <a href="mailto:<?php echo myobfiscate('someone@somewhere.com'); ?>"
title="Email me!"><?php echo myobfiscate('someone@somewhere.com');?> </a>

Тоді вивчіть своє джерело, ви будете приємно здивовані!


Це приємний приклад. Дякую. Якась підказка щодо SpamBots, що використовує HEX-декодування?
jasonflaherty

7

Ви можете спробувати приховати символи за допомогою html-об'єктів у hexa (напр .: & # x40 для @). Це зручне рішення, оскільки правильний браузер переведе його, і ви можете мати нормальне посилання. Недолік полягає в тому, що бот може перекласти це теоретично, але це трохи незвично. Я використовую це для захисту електронної пошти в своєму блозі.

Іншим рішенням є використання javascript для збирання частини адреси та розшифровки на ходу адреси. Недолік - те, що браузер з обмеженим JavaScript не відображатиме вашу адресу.

Найефективнішим рішенням є використання зображення , але користувачеві доводиться копіювати адресу вручну.

Ваше рішення досить добре , оскільки ви додаєте лише недолік (писати вручну @) лише для користувачів, у яких відключений JavaScript. Ви також можете бути більш захищеними:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

5

Спам-боти не інтерпретують це, оскільки це маловідомий метод :)

Спочатку визначте css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

Тепер, куди ви хочете відобразити свою електронну пошту, просто вставте наступний HTML:

<div id="email"></div>

І тада!


Це працює, але він не підтримує копіювальну пасту, що може вплинути на зручність використання більшості користувачів
Iruku Kagika

4

Я використовую дуже просту комбінацію CSS та jQuery, яка правильно відображає адресу електронної пошти для користувача, а також працює при натисканні або навішуванні якоря:

HTML:

<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>

CSS:

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

jQuery:

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

Ось робочий приклад.


чи покаже воно правильне значення href у рядку стану браузера, коли посилання наближено?
Нік О'Лай

Так, він показує правильне значення href, коли прив'язується посилання. Ось чому метод jQuery .hover потрібно реалізувати.
Сергіу

На жаль, ні, це не показує правильне значення href, принаймні, коли ви вперше наведіть на посилання (це me@example.spam). На другій курці все було нормально. Перевірте це за власним посиланням.
Нік О'Лай

1
Він працює в Chrome і IE. Здається, що лише у Firefox, при першому наведенні курсора рядок стану не оновлюється. Я спробую знайти рішення для Firefox.
Сергіу

1
Я бачу, бачу, мені справді подобається цей.
Ерік Бішард

3

! - Додаючи це для довідки, не знаю, наскільки застарілою може бути інформація, але вона розповідає про кілька простих рішень, які не вимагають використання будь-якого сценарію

Після того як я сам це шукав, я натрапив на цю сторінку, а також на ці сторінки:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

спробуйте змінити адресу електронної пошти

Приклад звичайного HTML:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com

Той же ефект, що використовується CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com

Поєднання цього з будь-яким із згаданих раніше методів може навіть зробити його більш ефективним


3

Одне просте рішення - використовувати HTML-об'єкти замість фактичних символів. Наприклад, "me@example.com" буде перетворено на:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

2
Спробуйте google.se/search?q=HTML+entities+converter, який повинен вас зайняти;)
grapefrukt

1
Google може знайти для вас багато сторінок. Один приклад: hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
Але чи не міг бот так само легко підробити це?
gargantuan

20
Так, приклад me @ stack ... краще писати як me@example.com, me@example.net або me@example.org - це єдині доменні імена, які невласники повинні використовувати в прикладах!
Ар'ян

4
Не настільки ефективно, відповідно до techblog.tilllate.com/2008/07/20/…
Фурманатор

3

Ось моя робоча версія:


Створіть десь контейнер із резервним текстом:

<div id="knock_knock">Activate JavaScript, please.</div>

І додайте внизу DOM (wrt надання) наступний фрагмент:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

Він додає згенеровану гіперпосилання до вказаного контейнера:

<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>

Крім того, тут є мінімізована версія:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>

2

Найкращий метод приховування адрес електронної пошти корисний лише до тих пір, поки програміст-бот не виявить це "кодування" та не введе в дію алгоритм розшифровки.

Опція JavaScript не буде працювати довго, тому що багато інструментів для сканування інтерпретації JavaScript.

Відповіді немає, імхо.


Чи є сканери, що інтерпретують JavaScript? Моя одна методика кодування JavaScript, здається, працює добре для мене протягом останніх кількох років - мій рівень спаму був досить стійким ~ 4 / тиждень, тому я не турбувався про адреси інших людей, які я довірив цьому методу. Повинен я?
Кев

Напевно, це може виключати багато сканерів, але мені, якби я створив адресний сканер, я застосував би JavaScript-
ліб

більше зусиль, ніж можна подумати
анонімний боягуз

Google зараз повзає через деякі JS.
Алістер Бульман

2

Ймовірно, є боти, які визнають [at]та інші маскування @символом. Тож це не дуже ефективний метод.

Впевнені, що ви можете використовувати такі кодування, як кодування URL або посилання символів HTML (або обидва):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

Але оскільки їх законно використовувати, кожен браузер / клієнт електронної пошти повинен також обробляти ці кодування.


Погодьтеся, спамери - це "розумні" люди, після багатьох років люди додають [у] або [крапку "замість синтаксису, звичайно, у них будуть алгоритми, які підбирають ці зразки.
SimonDowdles

Що з розшифровкою цих значень HEX?
jasonflaherty

2

Я шанувальник SpamSpan - він затуманений , але все ще розшифровується, якщо JS відключений. Здається, це теж працює, хоча я використовую його лише близько року на веб-сайті з низьким трафіком.

Існує також модуль для Drupal, який автоматично перетворює електронні листи в SpamSpans, якщо вони потрібні.


1

Чи працює, якщо я клацну правою кнопкою миші на посиланні та оберіть "копіювати URL"? Якщо ні, то це дуже не ідеальна ситуація (я дуже рідко натискаю посилання для поштового зв’язку, вважаючи за краще скопіювати адресу електронної пошти та вставити її в свою поштову програму чи куди б то не було потрібно в певний момент часу).

Я раніше був досить параноїком, захищаючи свою електронну адресу в режимі он-лайн (UseNet, Інтернет тощо), але в наші дні я підозрюю, що більше "можливих цілей для спаму" насправді генерується відповідно до локальних частин до домену програмно. Я базую це на тому, що, часом, переглядав журнали мого поштового сервера. Існує тенденція до багатьох спроб доставки неіснуючих адрес (включаючи усічені версії приманки для спаму, яку я зависав на UseNet ще в кінці 90-х, коли дуже часто переважали адреси скреблівок).


1

після використання стількох методів я знайшов простий спосіб і дуже дружній, боти шукають @ Símbolo, і останнім часом вони шукають [at] ant це варіація, тому я використовую 2 методи

  1. Я пишу свою електронну пошту на зображення, як доменне використання, і воно прекрасно працює або
  2. замінити Símbolo (@) на його подібне зображення

@ замінити і зображення alt буде alt = "@", тому бот знайде зображення, і будь-яка людина побачить це як звичайну адресу, тому, якщо він скопіює його, він скопіює електронну пошту, а завдання - don, тому код буде

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>

1

Існує відкритий ліцензійний PHP-скрипт, який видає javascript, який кодує пошту: http://www.maurits.vdschee.nl/php_hide_email/ . Потім ви можете легко викликати функцію php за допомогою конкретної пошти як аргумент.


1

Спочатку я би переконався, що адреса електронної пошти відображається лише тоді, коли у вас включений JavaScript. Таким чином, немає простого тексту, який можна прочитати без javascript.

По-друге, Спосіб реалізації безпечної функції - це триматися подалі від <button>тегу. Цей тег потребує текстової вставки між тегами, що робить його читабельним на комп’ютері. Натомість спробуйте <input type="button">обробляти javascript для onClick. Тоді використовуйте всі методи, згадані otherse, щоб реалізувати безпечне позначення електронної пошти.

Ще одним варіантом є наявність кнопки "Клацніть, щоб побачити електронну адресу". Після натискання ця зміна переходить у кодовану електронну пошту (символи в кодах HTML). Іншим клацанням миші переспрямовуємо до функції 'mailto: email'

Некодована версія останньої ідеї, з адресою електронної пошти, що вибирається та не вибирається:

<html>
<body>
<script type="text/javascript">
      e1="@domain";
      e2="me";
      e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>

Подивіться, чи це ви хотіли б, і поєднайте це з ідеями інших. Ніколи не можеш бути занадто впевненим.


2
О, дивіться - me@domain.extension - є звичайна текстова адреса електронної пошти.
Алістер Бульман

1

І моя функція. Я створив це, розглядаючи відповіді, розміщені в цій темі.

 function antiboteEmail($email)
 {
        $html = '';

        $email = strrev($email);
        $randId = rand(1, 500);

        $html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
        $html .= <<<EOD
                <script>
                $(document).ready(function(){

                    var addr = "$email";
                    addr = addr.split("").reverse().join("");
                    $("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
                });
                </script>
EOD;

        return $html;
    }

Він використовує два способи: праворуч на ліворуч і розміщення javascript.


1

Варіант 1: Розділіть електронну адресу на кілька частин і створіть масив у JavaScript з цих частин. Далі приєднайтеся до цих частин у правильному порядку та скористайтеся властивістю .innerHTML, щоб додати адресу електронної пошти на веб-сторінку.

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
 document.getElementById("email").innerHTML=email; 
 </script>

Варіант 2: Використовуйте зображення замість тексту електронної пошти

Веб-сайт для створення зображень із тексту: http://www.chxo.com/labelgen/

Варіант 3: Ми можемо використовувати AT замість "@" та DOT замість ".

тобто:

 info(AT)XXXabc(DOT)com 

1
Я думаю, що варіант 1 - це не гарний варіант. Аналізатор, який працює поруч з ботом, може легко зрозуміти значення внутрішньогоHTML, а варіант 3, мабуть, не дуже гарний, оскільки розумний бот міг це зрозуміти. Я думаю, що варіант 2 найкращий.
Джон Сондерсон

1

Мені не подобається змішування JavaScript і HTML, тому я використовую це рішення. Мені це добре працює, поки що.

Ідея : ви можете зробити це складнішим, надавши зашифровану інформацію в data-атрибутах та розшифрувати її в межах JS. Це робиться просто заміною літер або просто їх переверненням.

HTML :

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS :

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

Спробуйте: http://jsfiddle.net/x6g9L817/


1

як щодо HTML_CHARACTER ?:

joe&#064;mail.com

виходи

joe@mail.com

1
Адресу електронної пошти не можна натискати таким чином, і розміщення символу @ не буде захищеним від куль, оскільки воно не завжди буде виглядати таким же, як у випадку, якщо його було розміщено в рядку.
Brent O'Connor

0

Ось просте рішення jquery цієї проблеми:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

0

Мені подобається відповідь ofaurax найкраще, але я хотів би змінити це для трохи більш прихованого електронного листа:

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

0

Я просто повинен надати ще одну відповідь. Я просто придумав щось цікаве, щоб пограти.

Я дізнався, що у багатьох загальних таблицях символів букви @ та a знову з’являються не один раз. Ви можете зіставити оригінальні символи до нових відображень і ускладнити ботам спаму, щоб зрозуміти, що таке електронна пошта.

Якщо ви проведіть цикл через рядок і отримаєте код символу листа, а потім додайте до нього 65248 і побудуйте сутність html на основі номера, ви придумали читану людиною адресу електронної пошти.

var str = 'john.doe@email.com';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
    var num = str.charCodeAt(position);
    return ('&#' + (num + 65248) + ';');
});

Ось робоча загадка: http://jsfiddle.net/EhtSC/8/

Ви можете вдосконалити цей підхід, створивши більш повний набір відображень між символами, які виглядають однаково. Але якщо, наприклад, скопіювати / вставити електронну пошту в блокнот, ви отримаєте багато коробок.

Щоб подолати деякі проблеми з користувачем, я створив електронну пошту як посилання. Коли ви клацнете на ньому, він переставляє символи назад до оригіналів.

Щоб покращити це, ви можете створити більш складні відображення символів, якщо хочете. Якщо ви можете знайти декілька символів, які можна використати, наприклад, замість "a", чому б не випадково зіставити їх.

Напевно, не найбезпечніший підхід коли-небудь, але мені дуже цікаво грати з ним: D

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.