Обфускация email: какие техники реально защищают от спам-ботов в 2026 году
Исследователь превратил статью в honeypot: каждая техника защищает реальный адрес, спам = техника взломана. Результат — рейтинг 25 методов обфускации с живой статистикой.
Обфускация 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) молча удаляют часть спама ещё до попадания в папку «Спам», что искажало бы результаты.
Я не хочу, чтобы статистику исказили произвольные детали — например, объём писем конкретного спамера. Поэтому я группирую сообщения по спамерам: это гораздо сложнее, чем кажется, потому что спамеры часто скрывают свою личность.
Защита текстового адреса: что работает
15 техник для защиты адреса в plain text — от простых (HTML entities) до практически непробиваемых (AES-шифрование). Идеальный подход — комбинировать несколько: разбить адрес на сегменты, каждый защитить отдельной техникой. Ниже — самые важные, с кодом.
CSS display:none — одна из лучших
Идея: вставить в адрес фальшивые фрагменты, скрытые через CSS. Боты видят полный HTML и не умеют применять стили — получают мусорный адрес.
Важно менять позицию и содержимое «ловушек» — иначе бот сможет вычислить паттерн. Decoy-фрагменты скрыты от скринридеров, а настоящий адрес читается нормально — техника полностью доступна. Использовать именно display: none, а не визуальные хаки (уменьшение шрифта, смещение за экран) — они ломают доступность.
JS Conversion — пугающе простая и эффективная
В HTML — бессмысленный текст. Кастомная JS-функция конвертирует его в рабочий адрес. Большинство ботов работают только с HTML-исходником — а в нём ничего полезного нет.
Единственный способ восстановить адрес — запустить функцию в браузере с DOM и JavaScript. Это невозможно для подавляющего большинства сборщиков. Можно написать одну функцию на все адреса страницы или уникальную для каждого.
AES-256 шифрование
Адрес шифруется AES-256 (единственный публичный шифр, одобренный NSA для секретной информации). Расшифровка требует JS-файла, который большинство ботов не могут скачать или выполнить.
Реализация использует встроенную криптографию браузера (SubtleCrypto) — не запускается вне браузера, даже в JavaScript-окружениях. Требует HTTPS: SubtleCrypto доступна только в secure context.
Взаимодействие пользователя
Адрес скрыт до тех пор, пока пользователь не взаимодействует со страницей (клик, скролл). Это поднимает планку: бот должен не просто запустить браузер, но и имитировать поведение человека. Технику можно комбинировать с другими — сначала требовать взаимодействие, затем расшифровать.
HTML entities
Каждый символ адреса заменяется на HTML-entity: a вместо «a», @ вместо «@». Серверные библиотеки часто декодируют entities автоматически — казалось бы, техника бесполезна. Но статистика honeypot показывает: она всё ещё останавливает большинство ботов.
HTML-комментарии
Внутрь адреса вставляются HTML-комментарии. Только самые примитивные боты не умеют их отфильтровать — но таких большинство.
SVG-объект для текста
Адрес размещается внутри SVG-файла, подключённого через <object>. Бот не знает, что нужно заглядывать в SVG. Адрес хранится в plain text, но в нестандартном месте. Техника доступна для скринридеров. Важно: использовать <object>, не <img> (нет интерактивности) и не inline SVG (адрес окажется в HTML-исходнике).
JS-конкатенация
Адрес собирается из отдельных символов через document.write. Удобно (нет внешних зависимостей), блокирует большинство ботов. Но полный адрес виден прямо в HTML-исходнике — техника не считается безопасной.
JS Rot18
Адрес зашифрован ROT13 для букв и ROT5 для цифр. Внешний JS-файл расшифровывает при загрузке. Базовые боты не выполняют JavaScript, поэтому видят только «мусор». Но техника тривиально обращается — как минимум используйте нестандартный сдвиг (не 13/5).
Защита кликабельных ссылок
10 техник для защиты mailto:-ссылок. Защищается атрибут href — если текст ссылки тоже содержит адрес, нужна дополнительная текстовая обфускация. Многие техники зеркалят текстовые: entities, JS, AES работают аналогично.
HTTP-редирект — адреса нет нигде в HTML
Обычная ссылка (не mailto:) ведёт на серверный редирект, который отдаёт mailto:. В HTML — ни следа email-адреса. Боту пришлось бы перейти по ссылке, что большинство не делает.
Атрибуты nofollow, noindex не дают поисковикам считать ссылку битой (она ведёт не на страницу). После отладки можно переключить 302-редирект на 301 (постоянный) для ускорения. Пример выше — для Apache (.htaccess). Для nginx используйте return 302 в блоке location, для Node.js/Caddy — аналогичный серверный редирект.
SVG-объект
Для ссылок SVG работает аналогично текстовому варианту, но внутри SVG размещается элемент <a href="mailto:...">. Адрес с mailto:-ссылкой прячется в SVG-файле — боты не заглядывают внутрь <object>. Адрес хранится в plain text, но в нестандартном месте.
HTML entities для ссылок
Каждый символ href-атрибута заменяется на HTML-entity. Серверные библиотеки часто декодируют это автоматически, но большинство ботов всё равно не справляются.
URL-кодирование для ссылок
Аналогичный подход, но вместо HTML entities символы кодируются в URL-формате (%40 вместо @). Тоже тривиально декодируется серверными библиотеками, но большинство ботов не утруждаются.
JS-конкатенация для ссылок
Mailto-ссылка собирается из фрагментов через document.write. Удобно (без зависимостей), блокирует большинство ботов. Но полный адрес виден в HTML-исходнике.
JS Rot18 для ссылок
Href содержит ROT13/ROT5-зашифрованный mailto. Внешний JS расшифровывает при загрузке. Базовые боты не выполняют JS — видят мусор.
JS Conversion для ссылок
Href содержит ссылку-заглушку. Кастомная JS-функция при загрузке заменяет её на рабочий mailto:. В HTML-исходнике — ничего полезного. Одна из самых надёжных техник.
AES-шифрование для ссылок
Href шифруется AES-256. Расшифровка — через SubtleCrypto в браузере. Требует HTTPS. Практически невозможно взломать без выполнения JS в браузерном окружении.
Взаимодействие пользователя для ссылок
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 получают тысячи спам-сообщений. Они были опубликованы только на одной странице. Скрейпинг жив.
«Мой адрес открыт, и я не получаю спам». Боты не тратят равное время на каждую страницу: популярный контент тщательно сканируется, остальное игнорируется. Статья может внезапно стать вирусной — и незащищённый адрес соберёт весь спам.
«Достаточно хорошего спам-фильтра». Техники обфускации не дают ложных срабатываний, бесплатны в реализации и чрезвычайно эффективны. Зачем отказываться от первой линии обороны?
«Если спамеры узнают техники, они научатся их обходить». Этим техникам десятки лет. Статистика показывает: они так же эффективны сейчас, как и десятилетие назад. Большинство ботов остаются примитивными.
Что использовать на практике
- Комбинируйте техники — разбейте адрес на сегменты, каждый защитите отдельным методом
- Минимально: CSS display:none + JS Conversion — просто, эффективно, доступно для скринридеров
- Максимально: AES-шифрование + взаимодействие пользователя — практически непробиваемо, но требует HTTPS
- Для ссылок: HTTP-редирект через .htaccess — адреса нет нигде в HTML, нулевая нагрузка на клиент
- Избегайте техник, ломающих UX: CSS content, text-direction, картинки, подстановка символов
FAQ
Какая техника обфускации email самая эффективная?
По данным honeypot-эксперимента, самые надёжные — AES-256 шифрование и JS с взаимодействием пользователя. Адрес не появляется в HTML, а восстановить его можно только в браузере с поддержкой JavaScript. Для простых случаев CSS display:none + JS Conversion дают отличный результат с минимальными усилиями.
Нужна ли обфускация email, если есть спам-фильтр?
Да. Обфускация — первая линия обороны: она не даёт адресу попасть в базы спамеров. Спам-фильтр — вторая: он фильтрует то, что уже пришло. Обфускация бесплатна, не даёт ложных срабатываний и уменьшает нагрузку на фильтр.
Работают ли старые техники обфускации в 2026 году?
Да. Статистика honeypot показывает: даже HTML entities (техника 1998 года) всё ещё останавливают большинство ботов. Подавляющее большинство сборщиков email — примитивные скрипты, которые работают только с чистым HTML и не интерпретируют CSS или JavaScript.
Как обфускация 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 и обновляемой статистикой — на сайте автора.