Как бороться со спамом на домашнем вэб-сервере

Я написал статью Как послать Емайл с домашнего веб-сайта, где описал основной принцип отправки электронной почты с помощью SMTP сервера GMail, но ничего не сказал о защите от спама.

Теоретически если спамбот найдет нашу страницу Contact, то он может выделить из нее реквизиты емайл формы, и спаммер станет слать нам кипы мусора, прямо через URL:

http://mysexysite/cgi-bin/sendmail.py?name=Вася Пупкин&from=vasqpupkin@mail.ru&subject=Грязный спам&message=Читай блог Мисс Трамел и станешь дураком

Мы этого естественно не хотим.

Мы обезопасим себя тем, что:

  • спрячем HTML в Питонный код
  • сделаем картиночную кэпчу
  • будем вручную блокировать спаммеров

Программный код вместо HTML

Предположительно спамботам труднее ориентироваться в программном коде, чем в чистом HTML.

HTML

Python

Не совсем одно и то же.

Картиночная кэпча

Кэпча генерирует код, который показывается юзеру в виде картинки, чтоб он подтвердил его вручную. Если юзерский инпут не совпадет с кодом на сервере, письмо не отправляется. Картинка измалевана точками, чтоб спаммерские программы OCR не распознали текст, и зашифрована кодировкой Base64, чтобы бот не скачал ее по URL.

Ручной антиспам

Сервер генерирует ряд заголовков, которые могут идентифицировать спаммера:

REMOTE_ADDR IP, с которого осуществлен запрос на наш сайт.
HTTP_USER_AGENT Программа, с которой осуществлен запрос на наш сайт. У спаммеров агенты смешно называются: BlackWidow, ChinaClaw, Go!Zilla, Mister, Papa, Zeus и тд.
HTTP_REFERER Домен, с которого произошел запрос на наш сайт. В идеале это должен быть наш домен, потому что подразумевается, что посетители нашего сайта будут слать нам письма с нашего сайта, а не с Лубянки или Огарева 6.

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

Стирание HTML тагов

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

Далее:
Емайл формa, кэпча и антиспам

Leave a comment