Обфускация email: какие техники реально защищают от спам-ботов в 2026 году

Исследователь превратил статью в honeypot: каждая техника защищает реальный адрес, спам = техника взломана. Результат — рейтинг 25 методов обфускации с живой статистикой.

Обложка: Обфускация email: какие техники реально защищают от спам-ботов в 2026 году

Обфускация email — сокрытие адреса электронной почты в HTML-коде страницы, чтобы автоматические сборщики (спам-боты) не могли его извлечь. Большинство ботов настолько примитивны, что спотыкаются даже на простейших трюках вроде HTML-entities. Спенсер Мортенсен превратил свою статью в honeypot: каждая техника обфускации защищает реальный адрес, и когда на него приходит спам — значит, техника взломана.

Результат — рейтинг 25 техник обфускации email (15 для текста, 10 для кликабельных ссылок) с реальной статистикой. Лучшие: CSS display:none, JS Conversion, AES-шифрование. Худшие: CSS content, подстановка символов, картинки. Разбираем каждую категорию.

Ключевые выводы
  • Лучшие техники для текста: CSS display:none, JS Conversion, AES-шифрование, взаимодействие пользователя
  • Лучшие для ссылок: HTTP-редирект, JS Conversion, AES-шифрование — адреса нет нигде в HTML
  • Даже HTML entities (самый простой трюк) останавливают большинство ботов — настолько примитивны сборщики
  • Не работают: CSS content (видно, но нельзя скопировать), CSS text-direction, подстановка символов (@ → AT)
  • Статистика собрана через honeypot: каждая техника защищает реальный адрес, спам = техника взломана

По материалам статьи Спенсера Мортенсена.

Как устроен эксперимент

Статья Мортенсена — не просто обзор, а действующий honeypot. Каждая описанная техника защищает уникальный email-адрес. Когда на адрес приходит спам, автор знает: техника не выдержала. Статистика группируется по спамерам (а не по сообщениям), чтобы один агрессивный бот не исказил картину.

Для чистоты эксперимента автор поднял собственный почтовый сервер — крупные провайдеры (Gmail, Outlook) молча удаляют часть спама ещё до попадания в папку «Спам», что искажало бы результаты.

Я не хочу, чтобы статистику исказили произвольные детали — например, объём писем конкретного спамера. Поэтому я группирую сообщения по спамерам: это гораздо сложнее, чем кажется, потому что спамеры часто скрывают свою личность.
Спенсер МортенсенАвтор исследования, spencermortensen.com

Защита текстового адреса: что работает

15 техник для защиты адреса в plain text — от простых (HTML entities) до практически непробиваемых (AES-шифрование). Идеальный подход — комбинировать несколько: разбить адрес на сегменты, каждый защитить отдельной техникой. Ниже — самые важные, с кодом.

CSS display:none — одна из лучших

Идея: вставить в адрес фальшивые фрагменты, скрытые через CSS. Боты видят полный HTML и не умеют применять стили — получают мусорный адрес.

			<div class="email">user@<span>email.</span>example.<span>decoy.</span>com</div>

<style>
  div.email > span:nth-child(2) { display: none; }
</style>
		

Важно менять позицию и содержимое «ловушек» — иначе бот сможет вычислить паттерн. Decoy-фрагменты скрыты от скринридеров, а настоящий адрес читается нормально — техника полностью доступна. Использовать именно display: none, а не визуальные хаки (уменьшение шрифта, смещение за экран) — они ломают доступность.

JS Conversion — пугающе простая и эффективная

В HTML — бессмысленный текст. Кастомная JS-функция конвертирует его в рабочий адрес. Большинство ботов работают только с HTML-исходником — а в нём ничего полезного нет.

			<span id="text-conversion">zibby example com</span>

<script src="text-conversion.js" defer></script>
		

Единственный способ восстановить адрес — запустить функцию в браузере с DOM и JavaScript. Это невозможно для подавляющего большинства сборщиков. Можно написать одну функцию на все адреса страницы или уникальную для каждого.

AES-256 шифрование

Адрес шифруется AES-256 (единственный публичный шифр, одобренный NSA для секретной информации). Расшифровка требует JS-файла, который большинство ботов не могут скачать или выполнить.

			<span class="email">Kreuz2xa6xB8Fpjaa0lFgACNLO6n_Auu1CGjcG8z_Ec</span>

<script src="text-aes.js" defer></script>
		

Реализация использует встроенную криптографию браузера (SubtleCrypto) — не запускается вне браузера, даже в JavaScript-окружениях. Требует HTTPS: SubtleCrypto доступна только в secure context.

Взаимодействие пользователя

Адрес скрыт до тех пор, пока пользователь не взаимодействует со страницей (клик, скролл). Это поднимает планку: бот должен не просто запустить браузер, но и имитировать поведение человека. Технику можно комбинировать с другими — сначала требовать взаимодействие, затем расшифровать.

HTML entities

Каждый символ адреса заменяется на HTML-entity: a вместо «a», @ вместо «@». Серверные библиотеки часто декодируют entities автоматически — казалось бы, техника бесполезна. Но статистика honeypot показывает: она всё ещё останавливает большинство ботов.

			ab@email.example.com
		

HTML-комментарии

Внутрь адреса вставляются HTML-комментарии. Только самые примитивные боты не умеют их отфильтровать — но таких большинство.

			user@example <!-- .decoy --> .com
		

SVG-объект для текста

Адрес размещается внутри SVG-файла, подключённого через <object>. Бот не знает, что нужно заглядывать в SVG. Адрес хранится в plain text, но в нестандартном месте. Техника доступна для скринридеров. Важно: использовать <object>, не <img> (нет интерактивности) и не inline SVG (адрес окажется в HTML-исходнике).

			<object class="email" width="130" height="24"
  data="email.svg" type="image/svg+xml"></object>

<!-- email.svg -->
<svg viewBox="0 0 130 24" xmlns="http://www.w3.org/2000/svg">
  <text x="50%" y="50%">user@example.com</text>
</svg>
		

JS-конкатенация

Адрес собирается из отдельных символов через document.write. Удобно (нет внешних зависимостей), блокирует большинство ботов. Но полный адрес виден прямо в HTML-исходнике — техника не считается безопасной.

			<script>
  document.write('u'+'s'+'e'+'r'+'@'+'e'+'x'+'a'+'m'+'p'+'l'+'e'+'.'+'c'+'o'+'m');
</script>
		

JS Rot18

Адрес зашифрован ROT13 для букв и ROT5 для цифр. Внешний JS-файл расшифровывает при загрузке. Базовые боты не выполняют JavaScript, поэтому видят только «мусор». Но техника тривиально обращается — как минимум используйте нестандартный сдвиг (не 13/5).

			<span class="email">hfre@rknzcyr.pbz</span>
<script src="text-rot18.js" defer></script>
		

10 техник для защиты mailto:-ссылок. Защищается атрибут href — если текст ссылки тоже содержит адрес, нужна дополнительная текстовая обфускация. Многие техники зеркалят текстовые: entities, JS, AES работают аналогично.

HTTP-редирект — адреса нет нигде в HTML

Обычная ссылка (не mailto:) ведёт на серверный редирект, который отдаёт mailto:. В HTML — ни следа email-адреса. Боту пришлось бы перейти по ссылке, что большинство не делает.

			<a rel="nofollow, noindex" href="email/">email</a>

# .htaccess
RewriteEngine On
RewriteRule ^email/$ 'mailto:user@example.com' [R=302,L]
		

Атрибуты nofollow, noindex не дают поисковикам считать ссылку битой (она ведёт не на страницу). После отладки можно переключить 302-редирект на 301 (постоянный) для ускорения. Пример выше — для Apache (.htaccess). Для nginx используйте return 302 в блоке location, для Node.js/Caddy — аналогичный серверный редирект.

SVG-объект

Для ссылок SVG работает аналогично текстовому варианту, но внутри SVG размещается элемент <a href="mailto:...">. Адрес с mailto:-ссылкой прячется в SVG-файле — боты не заглядывают внутрь <object>. Адрес хранится в plain text, но в нестандартном месте.

Каждый символ href-атрибута заменяется на HTML-entity. Серверные библиотеки часто декодируют это автоматически, но большинство ботов всё равно не справляются.

			<a href="mailto:user@example.com">email</a>
		

Аналогичный подход, но вместо HTML entities символы кодируются в URL-формате (%40 вместо @). Тоже тривиально декодируется серверными библиотеками, но большинство ботов не утруждаются.

			<a href="mailto:%75%73%65%72%40%65%78%61%6d%70%6c%65%2e%63%6f%6d">email</a>
		

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

			<script>
  document.write('<a href="mailto:'
    +'u'+'s'+'e'+'r'+'@'+'e'+'x'+'a'+'m'+'p'+'l'+'e'
    +'.'+'c'+'o'+'m'+'">email</a>');
</script>
		

Href содержит ROT13/ROT5-зашифрованный mailto. Внешний JS расшифровывает при загрузке. Базовые боты не выполняют JS — видят мусор.

			<a class="email"
  href="znvygb:hfre@rknzcyr.pbz">email</a>
<script src="link-rot18.js" defer></script>
		

Href содержит ссылку-заглушку. Кастомная JS-функция при загрузке заменяет её на рабочий mailto:. В HTML-исходнике — ничего полезного. Одна из самых надёжных техник.

			<a id="link-conversion" rel="nofollow, noindex"
  href="to-email-spencer/">email</a>
<script src="link-conversion.js" defer></script>
		

Href шифруется AES-256. Расшифровка — через SubtleCrypto в браузере. Требует HTTPS. Практически невозможно взломать без выполнения JS в браузерном окружении.

			<a class="email" rel="nofollow, noindex"
  href="xd7L-AOA9Qckl5RXbFuFw8LxuiPZPk3vzyPS55-KlD">email</a>
<script src="link-aes.js" defer></script>
		

Mailto-ссылка появляется только после взаимодействия пользователя со страницей (клик, скролл). Можно комбинировать с JS Conversion или AES — сначала ждать действия, затем расшифровать.

Что не работает

  • CSS content — адрес виден, но его нельзя скопировать. Бесит пользователей, при этом бот может извлечь адрес прямо из HTML-атрибутов data-user и data-domain
  • CSS text-direction — переворачивает текст через unicode-bidi. Адрес можно скопировать, но он будет задом наперёд. Ломает UX, легко разворачивается ботами
  • Подстановка символов (@ → AT, . → DOT) — широко известна, тривиально обращается. Заставляет пользователя вручную исправлять адрес
  • Картинка — зрячие вынуждены перепечатывать, незрячие не видят адрес вообще. Ломает доступность
  • Инструкции (remove .fluff before writing) — работает только против ботов, но ломает UX: пользователь может не понять или не выполнить инструкцию

Частые возражения

«Спамеры больше не скрейпят — они покупают базы из утечек». Адреса из статьи-honeypot получают тысячи спам-сообщений. Они были опубликованы только на одной странице. Скрейпинг жив.

«Мой адрес открыт, и я не получаю спам». Боты не тратят равное время на каждую страницу: популярный контент тщательно сканируется, остальное игнорируется. Статья может внезапно стать вирусной — и незащищённый адрес соберёт весь спам.

«Достаточно хорошего спам-фильтра». Техники обфускации не дают ложных срабатываний, бесплатны в реализации и чрезвычайно эффективны. Зачем отказываться от первой линии обороны?

«Если спамеры узнают техники, они научатся их обходить». Этим техникам десятки лет. Статистика показывает: они так же эффективны сейчас, как и десятилетие назад. Большинство ботов остаются примитивными.

Что использовать на практике

  1. Комбинируйте техники — разбейте адрес на сегменты, каждый защитите отдельным методом
  2. Минимально: CSS display:none + JS Conversion — просто, эффективно, доступно для скринридеров
  3. Максимально: AES-шифрование + взаимодействие пользователя — практически непробиваемо, но требует HTTPS
  4. Для ссылок: HTTP-редирект через .htaccess — адреса нет нигде в HTML, нулевая нагрузка на клиент
  5. Избегайте техник, ломающих UX: CSS content, text-direction, картинки, подстановка символов
FAQ
1
Какая техника обфускации email самая эффективная?

По данным honeypot-эксперимента, самые надёжные — AES-256 шифрование и JS с взаимодействием пользователя. Адрес не появляется в HTML, а восстановить его можно только в браузере с поддержкой JavaScript. Для простых случаев CSS display:none + JS Conversion дают отличный результат с минимальными усилиями.

2
Нужна ли обфускация email, если есть спам-фильтр?

Да. Обфускация — первая линия обороны: она не даёт адресу попасть в базы спамеров. Спам-фильтр — вторая: он фильтрует то, что уже пришло. Обфускация бесплатна, не даёт ложных срабатываний и уменьшает нагрузку на фильтр.

3
Работают ли старые техники обфускации в 2026 году?

Да. Статистика honeypot показывает: даже HTML entities (техника 1998 года) всё ещё останавливают большинство ботов. Подавляющее большинство сборщиков email — примитивные скрипты, которые работают только с чистым HTML и не интерпретируют CSS или JavaScript.

4
Как обфускация email влияет на доступность (accessibility)?

Зависит от техники. CSS display:none, SVG-объекты и JS-методы полностью доступны для скринридеров. А вот картинки, CSS content и CSS text-direction ломают доступность — скринридер либо не видит адрес, либо читает мусор. Выбирайте техники с учётом accessibility.

Обфускация email — не security through obscurity, а практически работающая защита с многолетней статистикой. Большинство ботов примитивны и не эволюционируют. Даже простейшие техники отсекают 90%+ сборщиков, а комбинация CSS + JS делает адрес практически невидимым. О других аспектах веб-безопасности — в материалах про supply chain атаки 2026 года и Rowhammer-атаки на GPU Nvidia.

Полная статья с живым honeypot и обновляемой статистикой — на сайте автора.