В профильных сообществах email—маркетологов, на форумах, посвященных поддержке CMS, на конференциях — везде сейчас активно обсуждается проблема спам-атак, устойчивым вектором которых является инъекция текста в формы на сайтах. Такой способ используется для отправки спама, а также для проведения узконаправленных атак, парализующих работу с отдельными ящиками.

Приведу самый банальный пример отправки спама через форму. Есть сайт example.com, на нём есть форма подписки на новости. Спамер из своей базы берет ящик «жертвы», например, i.ivanov@mail.example, и вставляет его в поле «Адрес электронной почты», а поле «Имя» заполняет текстом подобного содержания: «аренда квартир в Москве недорого goo.gl/arendakvartirdaom», и нажимает «Подписаться». Конечно, всё это делает не сам спамер, а его скрипт, который при этом еще и капчу проходит. Через секунду Иван Иванов получает письмо с текстом: «Здравствуйте, аренда квартир в Москве недорого goo.gl/arendakvartirdarom! Вы подписались на новости портала example.com!»…

Команда Антиспама Mail.Ru сталкивается с такими атаками ежедневно, у нас накопился богатый опыт фильтрации, и мы хотим поделиться с вами рекомендациями, а также сравнить эффективность разных методов, описание которых можно встретить в интернете. Ниже я приведу самые распространенные векторы атак, расскажу, какие формы наиболее чувствительны к спаму, какие риски вас подстерегают, если ничего не предпринять. Ну и, конечно, что с этим делать email—маркетологам, владельцам и администраторам сайтов.

Спам через формы — это дешево


Спам — как один из видов рекламы — существует и будет существовать, пока он экономически целесообразен. Гораздо реже спам используется для продвижения товаров и услуг, которым заказан вход в легальные каналы продаж, практически весь такой нелегитимный трафик перекочевал в баннерные сети. Но вернемся к email—каналу. Всегда найдется «бизнес», которому безразличен репутационный вред от спам-рассылки, но для которого принципиальна стоимость.

Поэтому спамеры также стремятся минимизировать затраты. И формы на существующих сайтах подходят для такой цели идеально — чужой домен, чужой IP, чужая верстка письма — всё чужое. Нужен только скрипт, причём не самый сложный в реализации. Дешевизна — первая из двух ключевых причин паразитирования спамеров на чужих сайтах.

Вторая важная причина — доставляемость. Беда в том, что, используя чужую форму, злоумышленник получает не только бесплатные ресурсы, но и репутацию этого сайта/IP у MBP (Mail Box Provider). Спам идет с вашего домена, с вашего IP, с валидным SPF, DKIM, и даже строгая политика DMARC — столько раз спасавшая вашу рассылку от спуфинга — в данном случае не помогает.

Чем рискует бизнес?


Понятно, что в случае реализации атаки через форму проблемы свалятся на голову администратора сайта и/или email—маркетолога сервиса, но риски несет именно бизнес. Риски эти измеряются:

  • в человеко-часах на устранение последствий и самой проблемы;
  • в потерянной прибыли из-за ухудшения репутации и доставляемости у MBP;
  • в возможности потерять репутацию (ваши текущие и потенциальные пользователи могут получить спам именно от вас).

И чем крупнее сервис, тем выше стоимость этих рисков. В каком случае вам обязательно нужно дочитать этот материал до конца:

  • Ваш сервис проводит email—рассылки.
  • На сайте есть формы (любые) для:
    • регистрации;
    • внесения данных в личном кабинете;
    • обратной связи;
    • запроса информации;
    • отправки приглашений;
    • и прочих задач.
  • Вы отправляете письма по контактам из CRM.

Механика рассылки спама через формы «на пальцах»


Если отбросить множество вторичных факторов, спам попадает в письмо через UGC (User Generated Content), который используется при формировании письма. Такой контент может попасть в:

  • заголовок;
  • тему письма;
  • тело письма.

Более детальное рассмотрение начну с самого распространенного варианта.

Регистрация, подписка нового пользователя сервиса


To: %username% <%useremail%>
Subject: %username%, подтвердите Ваш email
Здравствуйте, %username%!

Знакомые конструкции? Спамерам и антиспаму тоже. Несколько лет назад в словарь любого уважающего себя маркетолога очень прочно вошло слово «персонализация». Вошло настолько крепко, что, несмотря на усилия профессионалов сообщества, обросло множеством мифов и трактовок, многие из которых морально устарели, но продолжают преподноситься как Best Practices. Главный миф заключается в том, что под персонализацией зачастую понимается обращение к подписчику по имени. К чему это приводит, можно почитать тут, а почему не работает с точки зрения маркетинга — уже подробно расписано в статье Дмитрия Кудренко.

Итого: берем базу email, скрипт, форму подписки/регистрации, в поле имени вводим спам-контент — и спам—рассылка с вашего сайта готова.

Спам через автоответы


Гораздо более редкий случай (лишь потому, что автоответы реже используются сервисами). Механика чуть сложнее, но у спамера больше возможностей. Форма обратной связи, заявка в службу поддержки, форма запроса коммерческого предложения — нередко для таких случаев сервис настраивает отправку автоответа пользователю. И здесь снова вступает в игру UGC: «В вашем обращении Вы писали …». Но если это было не обращение, а реклама виагры, а в поле email введен ящик ничего не подозревающего человека, то вы снова рискуете невольно отправить спам.

Приглашения


К счастью, эта функциональность сейчас практически не встречается на просторах интернета, но до сих пор еще можно встретить форму «рекомендуйте наш сервис другу» и «введите текст приглашения». И снова UGC от вашего сайта разлетается по ничего не подозревающим пользователям.

Смена личных данных


Скорее, выродившийся случай, но он всё же встречается, и написать о нём необходимо. Сценарий следующий:

  • спамер регистрирует в сервисе бота;
  • в настройках профиля изменяет email, а в личные данные вставляет спам—контент;
  • на указанный email уходит письмо об изменении данных, и в это письмо сервисы часто добавляют сами данные (в данном случае это будет спам).

Subscription Bomb Atack


Данный тип спама стоит особняком. Цель атаки — парализовать использование отдельно взятого ящика пользователя (или целой компании). Злоумышленник регистрирует целевой ящик на тысячах сервисов. Те начинают присылать на этот ящик письма подтверждения, приветственные письма и так далее. В итоге ящик жертвы наполняется тысячами непрочитанных писем, новые письма приходят постоянно. При этом, строго говоря, все эти письма спамом не являются. Использовать же атакованный ящик становится затруднительно. Такой тип атаки характерен не только для email, но и для соцсетей, и мессенджеров (подписки, добавления в друзья и так далее).

Что же делать?


Пожалуй, ключевая глава данного обзора. Какие советы можно встретить на просторах интернета и какова их эффективность с точки зрения антиспама?

  1. Капча. Их много — простые и сложные, с картинками, текстами, цифрами, с вводом и без ввода. Но капча обходится. Легко. Не то что бы её не нужно ставить, просто она слегка удорожит (не усложнит, а именно удорожит) отправку спама через ваши формы. Принцип «мне не нужно бежать быстрее медведя, мне нужно бежать быстрее тебя» всё-таки работает, и если у соседа капчи не будет, а на вашем сайте — будет, то спамер, вероятно, обживется именно у соседа.
  2. Валидация (например, regexp на наличие урла в UGC—поле). В современном антиспаме контентные сигнатурные признаки и методы блокировки не считаются надежными, слишком они неустойчивы и легко обходятся злоумышленником. К тому же эффективность данного метода очень сильно зависит от технической реализации.
  3. Скрытые поля (видимые скрипту, но не видимые пользователю). К сожалению, эффективность метода близка к нулю.
  4. Модерация. Надежный, как дубина, метод борьбы, но очень трудоемкий — подходит разве что для очень маленьких сервисов.
  5. Мониторинг активности. Этот способ, скорее, дополняет любой другой — вы же не можете начать решать проблему, пока о ней не узнаете. График регистраций, графики использования других форм — и вы получаете не только надежный инструмент обнаружения проблем, но и, в качестве приятного бонуса, у вас появляются отличные продуктовые метрики. Не работает для медленного спама — если подозрительная активность составляет лишь малую долю органического трафика.
  6. Мониторинг почтового трафика со своего сайта (если это по каким-то причинам еще не сделано) — настроить просмотр статистики в Postmaster, подключить получение FBL—отчетов (feed back loop) — меры реактивные, но они позволят выявить проблемы. Почитать можно здесь, а подключить — здесь.
  7. Самый простой и самый эффективный способ. Не использовать для неподтвержденных ящиков (не прошедших процедуру Double Opt In) User Generated Content в письмах. Ни в приветствиях, ни в цитировании при автоответе — нигде. Нет в письмах UGC, строгая политика DMARC, внедрен DOI — и от имени вашего сайта никто не сможет рекламировать виагру. Это единственный набор мер, который дает 100% эффективности.

А что же рынок?


Сейчас я обращаюсь, скорее, не к владельцам и администраторам сайтов, а к реальным профессионалам отрасли, а именно к ESP (Email Service Provider) — сервисам рассылок и их представителям. Безусловно, данный вид спам-атак наносит существенный урон и репутации отрасли в целом. Что можно сделать дополнительно?

  • Просвещение: рассказывать клиентам, объяснять риски.
  • Разделение потока: выделение регистрационных писем, отдельные мониторинги, более тщательный анализ FBL—отчетов на регистрационный поток.
  • Последовательная политика в искоренении UGC в письмах для неподтвержденных ящиков.

Послесловие


Проблема спама через формы актуальна, как никогда раньше. Уже пострадали платежные системы, банки, операторы связи, крупные порталы, маленькие интернет-магазины по всему миру. Решение проблемы очень простое и эффективное, а цена сбывшихся рисков крайне высока для любого бизнеса. Внедряйте простые методы защиты и не становитесь невольным участником спам-рассылок.

Комментарии (68)


  1. achekalin
    21.05.2018 16:27

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

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


    1. 4Alexander Автор
      21.05.2018 16:47

      Здравствуйте! Нередко условно первое письмо является очень важным для получателя. Это может быть, например, подтверждение регистрации или транзакция. Доступ к таким письмам у пользователя должен быть максимально быстрым и удобным. Но если какой-то сервис пренебрегает требованиями, например, запускает рассылки без DOI (подтверждения пользователем email'а из письма), то очень быстро его письма окажутся в папке «Спам» или вообще перестанут доставляться. К счастью, большая часть рынка сейчас очень внимательно следит за репутацией своих рассылок и следует общепринятым практикам.


      1. achekalin
        21.05.2018 17:40

        1) Не понял ваш point. Я и говорю, что нужно бы выделить в отдельный список первые сообщения от сервисов, а остальные от них же либо пропускать, либо нет, глядя на реакцию на первые. Причем, как мы все видели, рассылка от сервиса может быть не просто отправкой с одного и то же адреса, а с адреса, уникального для рассылки или для получателя — все эти письма хотелось бы принимать за единый объект «сервис», и разрешать сервис едино (иначе при смене адреса отправителя потребуется новое потверждение).

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

        Скажем, открыл кто-то маленький интернет-магазин. Ему не нужно делать рассылку на всю страну, но он полагает, что его письма (с регистрацией, с заказом) хотя бы в спам не попадут. И вот тут начинается квест.

        Помните, как недавно была эпидемия рассылок, где письма выглядели точно как письма известных сервисов о регистрациях. После этого в «спам» и легетивные письма казенного вида полетели.


        1. Agel_Nash
          21.05.2018 18:15

          Я и говорю, что нужно бы выделить в отдельный список первые сообщения от сервисов, а остальные от них же либо пропускать, либо нет, глядя на реакцию на первые

          А что вы будете делать если письма будут приходить в таком порядке (пример из жизни)?
          — Информация о заказе
          — Информация об оплате
          — Обновление статуса заказа
          — Начисление бонусов
          — Напоминание о начислении бонусов
          — Напоминание о списании бонусов
          — Списание бонусов
          — Актуальный список аукционных товаров
          — Поздравление с праздником
          — И т.д.

          При ссылка описаться в письме не работает. Личный кабинет на сайте тоже не отписывает… Имхо, ваш метод не на столько эффективен, как может показаться на первый взгляд.


          1. achekalin
            21.05.2018 18:20

            Я не против любого другого метода. Предложите что-то более полезное.


      1. Kanut79
        22.05.2018 09:21

        Здравствуйте! Нередко условно первое письмо является очень важным для получателя. Это может быть, например, подтверждение регистрации или транзакция. Доступ к таким письмам у пользователя должен быть максимально быстрым и удобным.


        Ну у моего провайдера для этого есть статус-папочка " неизвестный отправитель". И через настройки каждый сам может решить что по дефолту должно происходить с такими письмами.


        1. 4Alexander Автор
          22.05.2018 11:43

          Спасибо всем за комментарии в этой ветке! Я обязательно передам идеи продуктовой команде.


    1. smple
      21.05.2018 19:37

      Есть хороший способ как побороть для себя спам.


      1. Регистрируем ящик
      2. Для каждого сервиса генерируем email постоянный на специальных сервисах который будет пересылать письма к вам на ящик в шаге 1.
      3. Если мы сообщаем свой настоящий ящик другу в реале, то вносим его ящик в white list
      4. Все письма не от сервиса и не из whitelist в спам.

      Дополнительный профит, если какой то сайт продал базу адресов или ее слили, вы можете в сервисе(где генерировали email) просто удалить временный ящик и весь спам прекратиться (отпишитесь от получения писем с этого сайта), можно сгенерировать новый email и прописать его в сайте и уведомления к вам пойдут через него, а тот ящик что оказался у спамеров будет уходить в /dev/null


      Сервисы для шага 2 их довольно много в гугле и они бесплатны.


      1. achekalin
        21.05.2018 20:03

        Вроде в mail.ru прямо есть кнопка создать темповых адрес. Удобно.


  1. Pensioner799
    21.05.2018 18:20

    Есть база ip спам адресов. Вставляете в htaccess и спам как рукой сняло! Сам пробовал и не на одном сайте. Самый главный злодей спамщик это Trusov Ilja Igorevich У него не один диапазон адресов работает на всевозможный спам. Также богатая база почтовых адресов с которых спам идет и есть даже каталог русскоязычный если в нем зарегились спам вам обеспечен! Я про это на форуме своем писал.


    1. 4Alexander Автор
      21.05.2018 18:28

      Политика блэклистинга, безусловно, рабочий инструмент. Особенно в сочетании с хорошо прописанным санитайзингом форм, капчей и тд. Но, к сожалению, такой подход не гарантирует 100% эффективной защиты. К тому же — как и любой список — его необходимо поддерживать, затрачивая на это пусть небольшие, но ресурсы. В своей статье я дал метод, который однозначно решит проблему спама через форму подконтрольных вам ресурсов. Повторюсь приведенный мной метод решает именно проблему спама через формы. Борьба с регистрацией ботов, кликерами — это уже совсем другая история :).


      1. Pensioner799
        21.05.2018 18:40

        Но как говорится дело в корне. У каждого бота и у каждого спамера есть ip/ Почему его не блокировать сразу. Если этот ip состоит в как и любой другой в диапазоне ip, с которых идет спам, скажем так. Так блокируйте диапазонами. Как с Trusov Ilja Igorevich самым известным спамщиком у которого не в одной стране по нескольку диапазонов адресов. Я его за неделю заблокировал и спама нет! Потом можно вести лог отправляемых писем с формы на сайте и смотреть по времени, да как угодно можно выявлять их! Ваш метод скажем не всем понятен будет, а тут намного все проще! Базу могу выложить, прямо с кодом для .htaccess


        1. 4Alexander Автор
          21.05.2018 18:58

          В некоторых случаях можно целые автономные системы подконтрольные спамерам находить. Но чаще всего IP-адрес меняется очень быстро. Убрать из писем UGC — на самом деле очень просто. Пару строчек поправить — и счастье. К тому же я приводил в статье ссылки на пару источников, в которых также с разных точек зрения показывается что псевдоперсонализация писем — не очень хорошо.
          В любом случае — борьба с спамом — это хорошо! Рад, если предложенные мной или в комментариях методы спасут чьи-то проекты от подобной атаки.


        1. vanxant
          22.05.2018 12:42

          Трусов не со своего компа спам рассылает, у него ботнеты. Т.е. компы обычных людей, которые сидят на динамических айпишниках у самых разных провайдеров.
          Баня таких несчастных диапазонами, вы так же баните собственных потенциальных клиентов, которые не смогут пользоваться вашим сервисом. При этом, например, рекламу вы им показываете. Вы эти потери считали?


          1. Pensioner799
            23.05.2018 07:10

            Ну во первых заблокировать 1-2 из России или диапазон скажем Австралия! У Трусова они все зарубежные в основном. Те кто на мой сайт не ходят, если только поспамить ))))) Так что Я уже как год не знаю проблем со спамом! Потом Если Российский адрес так я его на другой сайт посылаю Где он может написать письмо что он не бот и я его разблокирую. Так же пользователь узнает что с его компом что то не то и сканирует! Рабочая схема уже как год! А сил потратил неделю )))


  1. Pensioner799
    21.05.2018 18:42

    Я даже больше скажу я им редирект устроил на специально созданный сайт где их в одно место посылаю ))))


  1. fzn7
    21.05.2018 18:50
    +1

    Не многие помнят, что 10 лет назад mail.ru нагонял народ в Мой Мир, рассылая приглащения от имени собственных пользователей по их же контакт-листу

    roem.ru/11-04-2008/134648/mailru-sozdaet-set-odnomylnikov


  1. Haarolean
    21.05.2018 18:58

    Вот уж весело, мейлру со своим adware размышляет о спаме.


  1. Aleksei_Segodin
    21.05.2018 19:11

    Самая лучшая защита от такого спама — отсутсвие всего того, что определяет форму как таковую:

    • убрать тег form
    • убрать action=""
    • убрать type="submit" на кнопке
    • всё отправлять через JavaScript

    Неоднократно проверено на практике: никакого спама.


    1. 4Alexander Автор
      21.05.2018 19:29

      Спасибо за предложенный способ!
      Вы описываете защиту от харвестинга со стороны злоумышленника. Сейчас это действительно может работать какое-то время. На самом деле — это уже пройденный путь на примере алгоритмов сбора email адресов «из открытых источников». На зашумление ящиков веб-мастерами (например вместо @ писать [at]) спамеры отвечали усложнением регулярок.

      Мой же посыл, что важно в принципе исключить для злоумышленника инъекцию спам-контента в письма от Вашего сайта. Благо в случае с формами это возможно.


      1. Aleksei_Segodin
        21.05.2018 19:43

        Мне кажется, такая схема будет работать до тех пор, пока спамер не заинтересуется конкретно моим сайтом и подумает как можно обойти мою «защиту». Но для этого ему нужно лично зайти на сайт, посмотреть как сделана страница и написать парсер под мой конкретный случай.

        Но если он уж до такой степени заинтересовался именно моим сайтом, то ему проще будет отправить форму вручную.
        То есть, на сколько я понимаю, описанный мной способ работает н 100% случаев. Кроме тех случаев, когда хакер/спамер захотел насолить именно вам. Но мы знаем, что взломать можно всё и тут уже ничего не спасёт.

        P.S. Разве-что я чего-то не знаю про приёмы работы спам-ботов. Сам я не хакер и даже программист с натяжкой.


        1. 4Alexander Автор
          22.05.2018 11:47

          Не скажу за фронтендеров :) Но мне кажется, что исключение семантических тегов может не очень хорошо отразится в каких-то кейсах (например использовании аналитических систем), да и лишний JS там где можно обойтись HTML — тоже в общем случае не очень хорошо. Но не хочу развивать холивар на эту тему ))).
          Замечательно, что у вас есть методы, которые работают. Моя задача — показать чуть более широкий набор мер и предложить оптимальный по простоте и эффективности.


          1. Aleksei_Segodin
            22.05.2018 11:50

            Да, вы правы, при моём подходе уже нужно балансировать и взвешивать все «за» и «против».


    1. vanxant
      22.05.2018 12:47

      Можно ничего не убирать, а сделать honeypot форму. А реальные данные, как вы и говорите, отправлять через js.
      Только это не спасёт от современных ботов, которые используют безголовый браузер и тупо ищут инпуты. От инпутов отказаться весьма и весьма сложно…


      1. Aleksei_Segodin
        22.05.2018 12:59

        А как такие боты узнают куда отправлять данные, если в отсутствует ссылка? Я имею ввиду не honeypot форму, а те самые «бездомные» инпуты.


        1. vanxant
          22.05.2018 15:08

          Тупо заполнят ваши бездомные инпуты и жамкнут javascript-ом по элементу с текстом «отправить»


          1. Aleksei_Segodin
            22.05.2018 15:15

            Да, и правда, не подумал о таком :)
            Хорошо, что на том сайте который я делал форма генерируется JS-ом. Боты вообще голову сломают пока продерутся через мой JS до кнопки отправки :) Наверное по этому у нас еще не было ни одного спам-сообщения.
            А если заморочиться, то можно ещё и обфусцировать текст кнопки так как это делают с имейлами.


            1. vanxant
              22.05.2018 15:44

              Да никто не будет никуда продираться.
              1. Грузится сайт в обычный хром, только без окна.
              2. Ждём документ.реди
              3. Ищем инпуты и текстарии. Вы же указываете input type=email, required и т.п. для удобства заполнения на мобильных? В текстарию спамим.
              4. Ищем кнопку, триггерим ей онклик.
              5. Отправилось / не отправилось в общем пофиг, здесь ковровые бомбардировки по интернетам. Сайтов много. Т.е. пока вы маленький, ещё можно что-то химичить, делать honeypot-ы, абракадабру в name инпутов и др. Как только чуть выросли, придёт человек марки биоробот и ручками за 1 минуту отправит сообщение. А робот запомнит чего куда пихать.


              1. Aleksei_Segodin
                22.05.2018 16:00

                А event.isTrusted тут не поможет?


  1. djv57
    22.05.2018 00:43

    У меня вопрос, касающийся репутационной защиты. Есть форма регистрации на сайте. Спамер (назовём его так) может устроить массовую регистрацию новых пользователей на сайте, используя почтовые адреса из своих баз рассылок. Результатом данной акции будет падение репутации или даже попадание в спам-листы добропорядочного домена. Как с этим бороться? С помощью WAF?


    1. 4Alexander Автор
      22.05.2018 11:30

      Если цель спамера не доставить спам, а «подставить» сторонний домен — тогда все немного сложнее, чем просто убрать UGC из писем.
      Давайте сразу оговоримся, что вряд ли какой-то мелкий сайт столкнется с атакой подобного рода, а значит сервис располагает какими-то ресурсами для митигирования проблемы.
      Что можно сделать предиктивно:

      • Капча, санитайзинг форм — мало эффективно, так как легко проходится, но пусть лучше будет
      • Выделение регистрационных писем в отдельный сегмент. Например, с помощью X-Mailru-Msgtype — и наблюдение в Постмастере за данным сегментом
      • Подписаться на получение fbl-отчетов
      • Если есть время и ресурсы — рейтлимиты на форме, например, для каких-то подозрительных AS

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

      В данном кейсе я должен сделать одно очень важное замечание по поводу Double Opt In. Если doi не настроен — это усугубит проблему в разы. После регистрации сразу полетят цепочки рассылок и реакция пользователей и почтовых провайдеров будет сильнее.


  1. Cheater
    22.05.2018 02:45

    Риски эти измеряются (...) в потерянной прибыли из-за ухудшения репутации

    Как по мне, вполне заслуженная кара за размещение на сайте средства, позволяющего подписывать кого угодно на новости сайта без его явного разрешения.


    1. Ndochp
      22.05.2018 07:11

      Так вектор атаки и направлен на попытку получить явное разрешение.


      1. Cheater
        22.05.2018 12:13

        ??? Нет, вектор атаки направлен не на это. Спамеру глубоко фиолетово, разрешу я сайту слать мне новости или нет, он к сайту отношения не имеет никакого. Его цель — чтобы его рекламный текст или ссылка мелькнули у меня в письме.


        1. Ndochp
          22.05.2018 12:37

          Вы писали

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

          Это утверждение не соответствует статье.
          Вектор атаки — используя средство получения явного разрешения (письмо с запросом-подтверждением) спамер доносит своё рекламное сообщение.
          Подписка на что-либо без разрешения не применяется, значит и кара — не заслуженная.


          1. Cheater
            22.05.2018 12:44

            Подписка на что-либо без разрешения не применяется

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

            Хорошо, неточно выразился, я имел в виду «отправлять пользователю что угодно от имени сайта». Даже легальный запрос на подписку, даже с легальным текстом. Кара заслуженная потому, что: 1) сайт одалживает свои credentials посторонним лицам. 2) сайт даёт им возможность слать получателю письма (неважно что в них; этих писем должно быть 0 в любом случае)


    1. 4Alexander Автор
      22.05.2018 11:31

      Проблема в том, что спамер «притворяется» нормальным пользователем и использует совершенно легитимные формы подписки или обратной связи. Вектор идет именно через инъекцию UGC в письмо.


      1. Cheater
        22.05.2018 11:58

        Легитимные != безопасные. Я имел в виду, что со стороны сайта вообще не очень хорошая идея предоставлять инструмент, дающий случайному прохожему возможность обращаться по email к любому другому юзеру от имени сайта (неважно какое содержимое будет в письме, подписка там, или валидация подписки — я как получатель не хочу вообще никаких email ни от какого сайта, пока сам не напишу например роботу с просьбой подписать меня).


        1. KYuri
          22.05.2018 12:07

          я как получатель не хочу вообще никаких email ни от какого сайта, пока сам не напишу например роботу с просьбой подписать меня)

          И как робот узнает, что запрос на подписку идёт именно от Вас, а не от злодея-спамера, откуда-то добывшего ваш email?


          1. Cheater
            22.05.2018 12:09

            Для отправки email от моего имени злоумышленнику нужно либо получить доступ к моему email аккаунту (и тогда левые подписки будут наименьшей из моих проблем), либо пытаться нелегитимно отправить письмо от моего имени (= проходить DMARC итд).


            1. KYuri
              22.05.2018 12:20

              Вашу идею понял — сервис должен отвечать на email, присланный пользователем на адрес этого сервиса.
              Согласен, в этом случае снимается проблема идентификации «настоящий пользователь»/«спамер».
              Но возникает другая — возрастание сложности для пользователя.


            1. 4Alexander Автор
              22.05.2018 12:49

              Ваша идея понятна и абсолютно здрава. Но реальность пока такова, что 99,9 интернета пока работают по «классическим» формам подписки, обратной связи и тп (напомню, что уязвима не только форма подписки, вектор — инъекция UGC в письма, и этот вектор может проявляться и в других кейсах).
              Очень близкое по духу вашей идеи решение сервису имплементировать возможность пользователю авторизацию почтового провайдера.
              Я уверен, что в ближайшие лет 5 механизмы подписки/отписки шагнут вперед. Но здесь довольно много препятствий в виде стандартов. RFC очень инертная штука.


          1. Kanut79
            22.05.2018 12:10

            Хм, а если на рассылку можно подписатся только в «личном кабинете» после введения пароля? Это разве не решит данную проблему?


            1. KYuri
              22.05.2018 12:25

              Тут вопрос не про конкретно «подписку на рассылку» (потому что подписка должна оформляться на уже валидированный email), а собственно про валидацию принадлежности email.


              1. Kanut79
                22.05.2018 12:30

                А валидация делается например вот так: при регистрации можно ввести только мэйл. Пользователю приходит письмо для верификации в которoм стоят только название ресурса, его мэйл и линк на форму с возможностью ввести пароль, имя, адрес и всё остальное.


                1. KYuri
                  22.05.2018 12:32

                  Статья как раз об этом: письмо для валидации email не должно содержать данных, вводимых пользователем :)


                  1. Kanut79
                    22.05.2018 12:36

                    Из вводимых пользователем данных письмо содержит только мэйл-адрес. И именно тот адрес на который посылается. Если туда ввести что-то лишнее, то письмо пользователю не дойдёт.


                    1. 4Alexander Автор
                      22.05.2018 12:43

                      Подписка подразумевает подтверждение email (DOI процедура).
                      Письмо подтверждения может содержать, а может и не содержать данные, введенные пользователем в других полях, либо подтянутые из базы (случай личного кабинета или CRM). И вот тут то и кроется соль.
                      Письмо вида
                      To: %username% <%useremail%>
                      Subject: %username%, подтвердите Ваш email
                      Здравствуйте, %username%!
                      Спасибо за регистрацию на ресурсе example.com!
                      дойдет.
                      Но, например, в переменной %username% может содержаться как имя: «Вася, Петя, Мария, Белый господин», так и спам-контент.
                      Мой посыл пока email получателя не подтвержден — не вставлять в письмо UGC.


                      1. Kanut79
                        22.05.2018 12:46

                        Извините, но где в моём тексте вы увидели предложение вставлять в письмо тот самый %username%? Я предлагаю вставлять исключительно мэйл-адрес.


                        1. 4Alexander Автор
                          22.05.2018 12:50

                          Простите, если был неправильно понят. Это скорее ответ в весь тред, к тому же комментарии читаем не только мы с вами.
                          Вы абсолютно правы — вставлять нужно только email. После подтверждения — уже можно вставлять UGC.


  1. Ivnika
    22.05.2018 09:30

    Рассуждения mail.ru о спаме это как рассуждения вора-профессионала о надежности замков и дверей. Хотя почему бы и нет- опыт то богатейший!


  1. Alena_SLB
    22.05.2018 11:16

    Спасибо большое за материал! Как раз недавно столкнулась с подобной проблемой на корпоративном сайте, надеюсь, удастся решить с помощью Ваших рекомендаций


    1. 4Alexander Автор
      22.05.2018 11:32

      Рад, что материал оказался вам полезен!


  1. spy45242
    22.05.2018 11:16

    Как делаю сейчас:
    1. Отправку делать через js, что бы нигде не светились теги формы и различные input type=«submit»;
    2. Добавить скрытое поле, которое пользователь не видит, но спам-бот заполнит;
    3. Пропускать письмо через словарь «запрещенных слов» (к примеру запретить вводить http://);
    4. Поставить скрытую капчу от гугла;
    5. Пропускать введенный e-mail через базу «спам адресов»;
    6. Поставить шаблон для ввода в поле на js, то есть при вводе номера телефона дописывать вместо цифр пробелы. Если пользователь вводит номер вручную по одной цифре, тогда всё гуд, но если номер скопировать в поле, то некоторые цифры просто съедать пробелами.
    7. Форму отрисовывать исключительно на js, ибо многие боты работают с курлом и разбирают поля формы, без js это будет проблематично. Хотя здесь есть косяк, если спамер использует PhantomJS.
    8. После нажатия на кнопку отправки формы пересылать пользователя на другую страницу с вопросом типа «вы действительно хотите это сделать?». Собственно жо этой формы спам-боты обычно не доходят, потому как ужа вроде как отправили форму.

    И это работает по крайней мере у меня.


    1. 4Alexander Автор
      22.05.2018 11:34

      Спасибо за детальный ответ! Я знаю, что подобные методы очень часто используются. Моя задача была предложить предельно простую альтернативу довольно обширному набору технических мер. А именно просто выкинуть из всех шаблонов писем, которые уходят на неподтвержденные email, все переменные вида %username%, то есть весь UGC. Поверьте этот простой метод столь же эффективен, как и ваш.


    1. Ndochp
      22.05.2018 12:42
      +1

      Если пользователь вводит номер вручную по одной цифре, тогда всё гуд, но если номер скопировать в поле, то некоторые цифры просто съедать пробелами

      Сжечь. Как же меня задрали ребята, которые требуют что-то вводить руками.
      У меня давно настроены средства авто заполнения на телефон, адрес, фамилию и тд. А потом появляются вот такие умные товарищи, на сайтах которых или вводится всё через одно место, или нужно после того, как логин-пароль заполнился из кипаса ставить-стирать пробел, чтобы активировась кнопка «войти». Видете ли она без события кейдауна в поле ввода пароля не нажимается.


      1. spy45242
        22.05.2018 12:58

        Сжечь. Как же меня задрали ребята, которые требуют что-то вводить руками.

        Жгите. Как же меня задрали ребята, которые требуют вводить логин и пароль на сайтах. Почему я не могу просто заходить на сайты и совершать там какие-то действия?
        //END sarcasm
        Я всё же склоняюсь к тому, что безопасность превыше всего, а потом уже удобство. Хотя это лично моё мнение.


        1. Ndochp
          22.05.2018 13:03

          Срочно отключите устройство от сети интернет. безопасность превыше всего
          //END sarcasm


          1. 4Alexander Автор
            22.05.2018 13:11

            Задача сервиса найти баланс между безопасностью и удобством. На самом деле это касается не только интернета, но и реальной жизни. Но в интернете найти такой баланс проще.
            Я понимаю, что существуют технологические методы защиты от описанного в статье вектора, которые применяются непосредственно к форме. Но это всегда и при любом раскладе будет аффектить на пользователя. Одного из 10 или на одного из 10000 — зависит от конкретной реализации. Можно ведь и так закрутить гайки, что даже самый настойчивый человек не пробьется :).
            Я попытался предложить метод, который находится не на уровне взаимодействия пользователя с интерфейсом. Получит пользователь письмо со своим именем или без — вероятнее всего, он не заметит. Поэтому я так настойчиво и предлагаю альтернативу различным валидациям.

            И да. Всем мир! ;)


    1. vvzvlad
      22.05.2018 22:13
      +1

      6. Поставить шаблон для ввода в поле на js, то есть при вводе номера телефона дописывать вместо цифр пробелы. Если пользователь вводит номер вручную по одной цифре, тогда всё гуд, но если номер скопировать в поле, то некоторые цифры просто съедать пробелами.

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


      1. spy45242
        22.05.2018 22:29
        -2

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


  1. AlexHanter
    22.05.2018 11:17

    В статье обсуждается метод спама, когда злоумышленник использует использует форму подписки (или нечто подобное) на стороннем, «добропорядочном» сайте или сервисе.

    а поле «Имя» заполняет текстом подобного содержания:


    Что мешает встроить в поле «Имя» формы отправки запрет на использование сторонних символов?

    У меня, например, разрешено использовать только кириллицу (русские буквы), дефис и пробел. Любой другой символ блокирует отправку письма и выводит соответствующее сообщение «разрешено использовать только русские буквы, дефис и пробел».

    Мне кажется, что проблема преувеличена. Просто надо взять за правило, что в поля формы не должны вводиться символы, которым там не место.

    И, кстати, на форме нет никакой капчи. Спам минимальный, можно сказать, что его вообще нет.


    1. 4Alexander Автор
      22.05.2018 11:41

      Спасибо за внимание к статье! К сожалению, это не дает гарантий. В своей практике я сталкиваюсь в том числе со спамом, который пройдет подобные правила валидации в форме. Это будет исключительно русский текст без дефисов и пробелов. «Вбей в поисковике %поисковая_фраза_спамера%». Поисковая фраза — как правило — просто строка символов, но по ней действительно в поисковике можно найти посадочную страницу спамера с соответствующим контентом.
      Простите за настойчивость, но я продолжу утверждать, что единственный метод со 100% эффективностью — это убирать UGC. :) К тому же это проще.


      1. AlexHanter
        22.05.2018 12:02

        Прошу прощения за то, что ввёл в заблуждение. Сейчас посмотрел правила проверки. Разрешены только русские буквы и дефис. Так как имя состоит из одного слова или двух слов, связанных дефисом (по правилам заполнения паспорта действующим в РФ).

        То есть фразу с пробелами «Вбей в поисковике ...» вставить не получится.

        Ещё стоит ограничение на количество вводимых символов — не более 15 знаков.

        Что тоже ограничивает вставляемую фразу по длине.

        Впрочем, я ничего не утверждаю категорично. Можно, конечно, вместо имени просто название товара ввести. Но смысл от такого спама?


        1. 4Alexander Автор
          22.05.2018 12:15

          Можно очень сильно закрутить гайки. Можно, например, не давать вбивать имя, а только выбирать из списка, ну и тд. Но тут вопрос к балансу между защитой и конверсией. Слишком строгие правила — отпугнут часть посетителей. Слишком мягкие — пропустят спам.
          По моему убеждению имя и прочие данные пользователя на стадии первого знакомства — пока email еще не подтвержден — вообще не нужны, и не надо его мучать вводом лишних данных. Потом, когда он пройдет по воронке, когда его лояльность к сервису вырастет — тогда и анкетировать. Но опять же — не для того чтобы вставить имя в текст письма, а чтобы сегментировать базу, делать действительно персонализированные письма… Но об этом Дима Кудренко очень хорошо написал. Ссылка есть в статье.


          1. AlexHanter
            22.05.2018 12:28

            По поводу подписки — справедливо. Можно обойтись только e-mail-ом, но форму обратного звонка предпочитаю делать из двух полей «имя» и «номер телефона». В данном случае, считаю, что обращаться к клиенту по имени более предпочтительно.


            1. 4Alexander Автор
              22.05.2018 12:37

              В случае обратного звонка контент пройдет «модерацию» мозгом оператора кол-центра. Вряд ли он будет обращаться «Мой белый господин!» или среагирует на спам. :) Так что тут соглашусь.


  1. AlexHanter
    22.05.2018 12:00

    Не туда ответил. А как удалять комментарии?