Статьи

Как остановить сбор спама с обфускацией электронной почты

Email harvest time День, когда я обнаружил, что ссылка «mailto:» была великолепной. Я мог опубликовать свой адрес на веб-странице, и любой желающий мог написать мне одним щелчком мыши. Это было в более невинные дни Интернета — до того, как сборщики спама вступили во владение. Используйте «mailto:» сегодня, и ваше первое сообщение от viagra появится через 30 секунд. Итак, как вы можете опубликовать адрес электронной почты, не привлекая нежелательного внимания от спамеров?

Наиболее очевидным решением является использование нечитаемой машиной электронной почты в вашем HTML, например, «bob (at) bobsdomain dot com». Хотя это усложняет работу спамеров, оно также затрудняет работу ваших пользователей.

Другим вариантом является создание адреса электронной почты с использованием JavaScript, возможно, с небольшой конкатенацией строк или кодированием, например


<p>contact 
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>

Это остановит большинство спамеров, но любой, у кого отключен JavaScript, не увидит ваш адрес. (Я бы не рекомендовал использовать document.write.)

Лучшее решение состоит в том, чтобы использовать комбинацию методов, чтобы помешать спамерам, не вызывая трудностей пользователя. Первым шагом является использование в нашем HTML удобочитаемого, но надежного адреса электронной почты. Мы также сделаем ссылку на страницу контактов, например,

 
<p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p>

Обратите внимание, что мы включили класс «email», чтобы можно было идентифицировать нашу ссылку. Следующим шагом является написание функции JavaScript, которая ищет на вашей странице запутанные электронные письма и преобразует их в настоящие ссылки «mailto:». Мы создадим файл «email.js» и включим его в наш HTML:

 
<script type="text/javascript" src="email.js"></script>

Требуемый код короткий, поэтому нам не нужна библиотека JavaScript:

Содержание email.js:

 
function EmailUnobsfuscate() {
	
	// find all links in HTML
	var link = document.getElementsByTagName && document.getElementsByTagName("a");
	var email, e;
	
	// examine all links
	for (e = 0; link && e < link.length; e++) {
	
		// does the link have use a class named "email"
		if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
		
			// get the obfuscated email address
			email = link[e].firstChild.nodeValue.toLowerCase() || "";
			
			// transform into real email address
			email = email.replace(/dot/ig, ".");
			email = email.replace(/(at)/ig, "@");
			email = email.replace(/s/g, "");
			
			// is email valid?
			if (/^[^@]+@[a-z0-9]+([_.-]{0,1}[a-z0-9]+)*([.]{1}[a-z0-9]+)+$/.test(email)) {
			
				// change into a real mailto link
				link[e].href = "mailto:" + email;
				link[e].firstChild.nodeValue = email;
		
			}
		}
	}
}

Объяснение кода:

  1. Строка 4 выбирает каждую ссылку <a> на нашей HTML-странице, а строка 8 проходит через них.
  2. В строке 11 проверяется ссылка на класс «email».
  3. Строка 14 извлекает запутанную электронную почту из текстового содержимого узла.
  4. Строки с 17 по 19 преобразуют его в реальный адрес электронной почты с помощью регулярных выражений: «точка» заменяется на «.», «(В)» заменяется на «@», и все пробелы удаляются.
  5. Строка 22 проверяет правильность полученного адреса электронной почты.
  6. Строки 25 и 26 затем модифицируют узел DOM и превращают его в настоящую ссылку «mailto:».

Наконец, нам нужно убедиться, что функция запускается при загрузке страницы, добавив строку в конец email.js:

 
window.onload = EmailUnobsfuscate;

Результат:

  • Наша оригинальная HTML-страница не содержит ссылок «mailto:» и не может быть легко взята спамерами.
  • Большинство пользователей (с включенным JavaScript) увидят стандартный адрес электронной почты и ссылку «mailto:».
  • Любой, кто не запускает JavaScript, увидит читаемый адрес «bob (at) bobsdomain dot com».

Цель этой статьи — показать концепцию, а не реальный код. Хотя пример работает, я предлагаю вам:

  • Используйте свой собственный запутанный формат электронной почты, например, «bob {@} bobsdomain -dot- com». Спаммеры могут читать эту статью и преобразовывать закодированные электронные письма так же легко, как и вы!
  • Используйте другой класс идентификатора ссылки — «электронная почта» немного очевидна!
  • Используйте библиотеку JavaScript, такую ​​как jQuery, чтобы сделать функцию короче. Вы также должны убедиться, что он справляется с пробелами или другими узлами DOM вокруг текста адреса электронной почты (не обрабатывается в приведенном выше коде).
  • Замените window.onload более надежным обработчиком событий.

Удачи.