company_banner

Формы на сайте — спамер поневоле



    В профильных сообществах 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 в письмах для неподтвержденных ящиков.

    Послесловие


    Проблема спама через формы актуальна, как никогда раньше. Уже пострадали платежные системы, банки, операторы связи, крупные порталы, маленькие интернет-магазины по всему миру. Решение проблемы очень простое и эффективное, а цена сбывшихся рисков крайне высока для любого бизнеса. Внедряйте простые методы защиты и не становитесь невольным участником спам-рассылок.
    Mail.Ru Group 640,80
    Строим Интернет
    Поделиться публикацией
    Комментарии 75
    • 0
      Иногда прямо очень хочется, чтобы провайдеры услуг почты (просто из того, что они крупные, с ними считаются, да и они сами могут себе позволить подобное исследование делать) подходили бы к вопросу примерно так: если юзеру (мне, например) первый раз пишут с какого-то сервиса, то помещаем это сообщение в отдельную папку «возможно, спам», и далее от этого сервиса все бросаем в спам. Как только юзер почел письмо от сервиса и нажал кнопку «я действительно подписался на их рассылку», письмо от указанного сайта спамом более не являются, и доставляются.

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

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

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

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

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

            При ссылка описаться в письме не работает. Личный кабинет на сайте тоже не отписывает… Имхо, ваш метод не на столько эффективен, как может показаться на первый взгляд.
            • 0
              Я не против любого другого метода. Предложите что-то более полезное.
          • 0
            Здравствуйте! Нередко условно первое письмо является очень важным для получателя. Это может быть, например, подтверждение регистрации или транзакция. Доступ к таким письмам у пользователя должен быть максимально быстрым и удобным.


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

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


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

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


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

            • 0

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

          • 0
            Есть база ip спам адресов. Вставляете в htaccess и спам как рукой сняло! Сам пробовал и не на одном сайте. Самый главный злодей спамщик это Trusov Ilja Igorevich У него не один диапазон адресов работает на всевозможный спам. Также богатая база почтовых адресов с которых спам идет и есть даже каталог русскоязычный если в нем зарегились спам вам обеспечен! Я про это на форуме своем писал.
            • 0
              Политика блэклистинга, безусловно, рабочий инструмент. Особенно в сочетании с хорошо прописанным санитайзингом форм, капчей и тд. Но, к сожалению, такой подход не гарантирует 100% эффективной защиты. К тому же — как и любой список — его необходимо поддерживать, затрачивая на это пусть небольшие, но ресурсы. В своей статье я дал метод, который однозначно решит проблему спама через форму подконтрольных вам ресурсов. Повторюсь приведенный мной метод решает именно проблему спама через формы. Борьба с регистрацией ботов, кликерами — это уже совсем другая история :).
              • 0
                Но как говорится дело в корне. У каждого бота и у каждого спамера есть ip/ Почему его не блокировать сразу. Если этот ip состоит в как и любой другой в диапазоне ip, с которых идет спам, скажем так. Так блокируйте диапазонами. Как с Trusov Ilja Igorevich самым известным спамщиком у которого не в одной стране по нескольку диапазонов адресов. Я его за неделю заблокировал и спама нет! Потом можно вести лог отправляемых писем с формы на сайте и смотреть по времени, да как угодно можно выявлять их! Ваш метод скажем не всем понятен будет, а тут намного все проще! Базу могу выложить, прямо с кодом для .htaccess
                • 0
                  В некоторых случаях можно целые автономные системы подконтрольные спамерам находить. Но чаще всего IP-адрес меняется очень быстро. Убрать из писем UGC — на самом деле очень просто. Пару строчек поправить — и счастье. К тому же я приводил в статье ссылки на пару источников, в которых также с разных точек зрения показывается что псевдоперсонализация писем — не очень хорошо.
                  В любом случае — борьба с спамом — это хорошо! Рад, если предложенные мной или в комментариях методы спасут чьи-то проекты от подобной атаки.
                  • –1
                    Согласен с Вами что добро это хорошо! На этой нотке хотел предложить всем желающим код с ip адресами спамеров под htaccess, причем именно igorevich Ilja все его диапазоны собраны. Заходите website и пишите в форму обратной связи. За небольшое вознаграждение вышлю полную базу.
                  • 0
                    Трусов не со своего компа спам рассылает, у него ботнеты. Т.е. компы обычных людей, которые сидят на динамических айпишниках у самых разных провайдеров.
                    Баня таких несчастных диапазонами, вы так же баните собственных потенциальных клиентов, которые не смогут пользоваться вашим сервисом. При этом, например, рекламу вы им показываете. Вы эти потери считали?
                    • 0
                      Ну во первых заблокировать 1-2 из России или диапазон скажем Австралия! У Трусова они все зарубежные в основном. Те кто на мой сайт не ходят, если только поспамить ))))) Так что Я уже как год не знаю проблем со спамом! Потом Если Российский адрес так я его на другой сайт посылаю Где он может написать письмо что он не бот и я его разблокирую. Так же пользователь узнает что с его компом что то не то и сканирует! Рабочая схема уже как год! А сил потратил неделю )))
              • 0
                Я даже больше скажу я им редирект устроил на специально созданный сайт где их в одно место посылаю ))))
                • +4
                  Не многие помнят, что 10 лет назад mail.ru нагонял народ в Мой Мир, рассылая приглащения от имени собственных пользователей по их же контакт-листу

                  roem.ru/11-04-2008/134648/mailru-sozdaet-set-odnomylnikov
                  • +3
                    Вот уж весело, мейлру со своим adware размышляет о спаме.
                    • 0
                      Самая лучшая защита от такого спама — отсутсвие всего того, что определяет форму как таковую:

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

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

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

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

                          P.S. Разве-что я чего-то не знаю про приёмы работы спам-ботов. Сам я не хакер и даже программист с натяжкой.
                          • +1
                            Не скажу за фронтендеров :) Но мне кажется, что исключение семантических тегов может не очень хорошо отразится в каких-то кейсах (например использовании аналитических систем), да и лишний JS там где можно обойтись HTML — тоже в общем случае не очень хорошо. Но не хочу развивать холивар на эту тему ))).
                            Замечательно, что у вас есть методы, которые работают. Моя задача — показать чуть более широкий набор мер и предложить оптимальный по простоте и эффективности.
                            • 0
                              Да, вы правы, при моём подходе уже нужно балансировать и взвешивать все «за» и «против».
                        • 0
                          Можно ничего не убирать, а сделать honeypot форму. А реальные данные, как вы и говорите, отправлять через js.
                          Только это не спасёт от современных ботов, которые используют безголовый браузер и тупо ищут инпуты. От инпутов отказаться весьма и весьма сложно…
                          • 0
                            А как такие боты узнают куда отправлять данные, если в отсутствует ссылка? Я имею ввиду не honeypot форму, а те самые «бездомные» инпуты.
                            • 0
                              Тупо заполнят ваши бездомные инпуты и жамкнут javascript-ом по элементу с текстом «отправить»
                              • 0
                                Да, и правда, не подумал о таком :)
                                Хорошо, что на том сайте который я делал форма генерируется JS-ом. Боты вообще голову сломают пока продерутся через мой JS до кнопки отправки :) Наверное по этому у нас еще не было ни одного спам-сообщения.
                                А если заморочиться, то можно ещё и обфусцировать текст кнопки так как это делают с имейлами.
                                • 0
                                  Да никто не будет никуда продираться.
                                  1. Грузится сайт в обычный хром, только без окна.
                                  2. Ждём документ.реди
                                  3. Ищем инпуты и текстарии. Вы же указываете input type=email, required и т.п. для удобства заполнения на мобильных? В текстарию спамим.
                                  4. Ищем кнопку, триггерим ей онклик.
                                  5. Отправилось / не отправилось в общем пофиг, здесь ковровые бомбардировки по интернетам. Сайтов много. Т.е. пока вы маленький, ещё можно что-то химичить, делать honeypot-ы, абракадабру в name инпутов и др. Как только чуть выросли, придёт человек марки биоробот и ручками за 1 минуту отправит сообщение. А робот запомнит чего куда пихать.
                      • 0
                        У меня вопрос, касающийся репутационной защиты. Есть форма регистрации на сайте. Спамер (назовём его так) может устроить массовую регистрацию новых пользователей на сайте, используя почтовые адреса из своих баз рассылок. Результатом данной акции будет падение репутации или даже попадание в спам-листы добропорядочного домена. Как с этим бороться? С помощью WAF?
                        • 0
                          Если цель спамера не доставить спам, а «подставить» сторонний домен — тогда все немного сложнее, чем просто убрать UGC из писем.
                          Давайте сразу оговоримся, что вряд ли какой-то мелкий сайт столкнется с атакой подобного рода, а значит сервис располагает какими-то ресурсами для митигирования проблемы.
                          Что можно сделать предиктивно:
                          • Капча, санитайзинг форм — мало эффективно, так как легко проходится, но пусть лучше будет
                          • Выделение регистрационных писем в отдельный сегмент. Например, с помощью X-Mailru-Msgtype — и наблюдение в Постмастере за данным сегментом
                          • Подписаться на получение fbl-отчетов
                          • Если есть время и ресурсы — рейтлимиты на форме, например, для каких-то подозрительных AS

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

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

                          Как по мне, вполне заслуженная кара за размещение на сайте средства, позволяющего подписывать кого угодно на новости сайта без его явного разрешения.
                          • 0
                            Так вектор атаки и направлен на попытку получить явное разрешение.
                            • 0
                              ??? Нет, вектор атаки направлен не на это. Спамеру глубоко фиолетово, разрешу я сайту слать мне новости или нет, он к сайту отношения не имеет никакого. Его цель — чтобы его рекламный текст или ссылка мелькнули у меня в письме.
                              • 0
                                Вы писали
                                вполне заслуженная кара за размещение на сайте средства, позволяющего подписывать кого угодно на новости сайта без его явного разрешения.

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

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

                                  Хорошо, неточно выразился, я имел в виду «отправлять пользователю что угодно от имени сайта». Даже легальный запрос на подписку, даже с легальным текстом. Кара заслуженная потому, что: 1) сайт одалживает свои credentials посторонним лицам. 2) сайт даёт им возможность слать получателю письма (неважно что в них; этих писем должно быть 0 в любом случае)
                            • 0
                              Проблема в том, что спамер «притворяется» нормальным пользователем и использует совершенно легитимные формы подписки или обратной связи. Вектор идет именно через инъекцию UGC в письмо.
                              • 0
                                Легитимные != безопасные. Я имел в виду, что со стороны сайта вообще не очень хорошая идея предоставлять инструмент, дающий случайному прохожему возможность обращаться по email к любому другому юзеру от имени сайта (неважно какое содержимое будет в письме, подписка там, или валидация подписки — я как получатель не хочу вообще никаких email ни от какого сайта, пока сам не напишу например роботу с просьбой подписать меня).
                                • 0
                                  я как получатель не хочу вообще никаких email ни от какого сайта, пока сам не напишу например роботу с просьбой подписать меня)

                                  И как робот узнает, что запрос на подписку идёт именно от Вас, а не от злодея-спамера, откуда-то добывшего ваш email?
                                  • 0
                                    Для отправки email от моего имени злоумышленнику нужно либо получить доступ к моему email аккаунту (и тогда левые подписки будут наименьшей из моих проблем), либо пытаться нелегитимно отправить письмо от моего имени (= проходить DMARC итд).
                                    • 0
                                      Вашу идею понял — сервис должен отвечать на email, присланный пользователем на адрес этого сервиса.
                                      Согласен, в этом случае снимается проблема идентификации «настоящий пользователь»/«спамер».
                                      Но возникает другая — возрастание сложности для пользователя.
                                      • 0
                                        Ваша идея понятна и абсолютно здрава. Но реальность пока такова, что 99,9 интернета пока работают по «классическим» формам подписки, обратной связи и тп (напомню, что уязвима не только форма подписки, вектор — инъекция UGC в письма, и этот вектор может проявляться и в других кейсах).
                                        Очень близкое по духу вашей идеи решение сервису имплементировать возможность пользователю авторизацию почтового провайдера.
                                        Я уверен, что в ближайшие лет 5 механизмы подписки/отписки шагнут вперед. Но здесь довольно много препятствий в виде стандартов. RFC очень инертная штука.
                                      • 0
                                        Хм, а если на рассылку можно подписатся только в «личном кабинете» после введения пароля? Это разве не решит данную проблему?
                                        • 0
                                          Тут вопрос не про конкретно «подписку на рассылку» (потому что подписка должна оформляться на уже валидированный email), а собственно про валидацию принадлежности email.
                                          • 0
                                            А валидация делается например вот так: при регистрации можно ввести только мэйл. Пользователю приходит письмо для верификации в которoм стоят только название ресурса, его мэйл и линк на форму с возможностью ввести пароль, имя, адрес и всё остальное.
                                            • 0
                                              Статья как раз об этом: письмо для валидации email не должно содержать данных, вводимых пользователем :)
                                              • 0
                                                Из вводимых пользователем данных письмо содержит только мэйл-адрес. И именно тот адрес на который посылается. Если туда ввести что-то лишнее, то письмо пользователю не дойдёт.
                                                • 0
                                                  Подписка подразумевает подтверждение email (DOI процедура).
                                                  Письмо подтверждения может содержать, а может и не содержать данные, введенные пользователем в других полях, либо подтянутые из базы (случай личного кабинета или CRM). И вот тут то и кроется соль.
                                                  Письмо вида
                                                  To: %username% <%useremail%>
                                                  Subject: %username%, подтвердите Ваш email
                                                  Здравствуйте, %username%!
                                                  Спасибо за регистрацию на ресурсе example.com!
                                                  дойдет.
                                                  Но, например, в переменной %username% может содержаться как имя: «Вася, Петя, Мария, Белый господин», так и спам-контент.
                                                  Мой посыл пока email получателя не подтвержден — не вставлять в письмо UGC.
                                                  • 0
                                                    Извините, но где в моём тексте вы увидели предложение вставлять в письмо тот самый %username%? Я предлагаю вставлять исключительно мэйл-адрес.
                                                    • 0
                                                      Простите, если был неправильно понят. Это скорее ответ в весь тред, к тому же комментарии читаем не только мы с вами.
                                                      Вы абсолютно правы — вставлять нужно только email. После подтверждения — уже можно вставлять UGC.
                                • 0
                                  Рассуждения mail.ru о спаме это как рассуждения вора-профессионала о надежности замков и дверей. Хотя почему бы и нет- опыт то богатейший!
                                  • 0
                                    Спасибо большое за материал! Как раз недавно столкнулась с подобной проблемой на корпоративном сайте, надеюсь, удастся решить с помощью Ваших рекомендаций
                                    • 0
                                      Рад, что материал оказался вам полезен!
                                    • –1
                                      Как делаю сейчас:
                                      1. Отправку делать через js, что бы нигде не светились теги формы и различные input type=«submit»;
                                      2. Добавить скрытое поле, которое пользователь не видит, но спам-бот заполнит;
                                      3. Пропускать письмо через словарь «запрещенных слов» (к примеру запретить вводить http://);
                                      4. Поставить скрытую капчу от гугла;
                                      5. Пропускать введенный e-mail через базу «спам адресов»;
                                      6. Поставить шаблон для ввода в поле на js, то есть при вводе номера телефона дописывать вместо цифр пробелы. Если пользователь вводит номер вручную по одной цифре, тогда всё гуд, но если номер скопировать в поле, то некоторые цифры просто съедать пробелами.
                                      7. Форму отрисовывать исключительно на js, ибо многие боты работают с курлом и разбирают поля формы, без js это будет проблематично. Хотя здесь есть косяк, если спамер использует PhantomJS.
                                      8. После нажатия на кнопку отправки формы пересылать пользователя на другую страницу с вопросом типа «вы действительно хотите это сделать?». Собственно жо этой формы спам-боты обычно не доходят, потому как ужа вроде как отправили форму.

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

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

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

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

                                                И да. Всем мир! ;)
                                              • 0
                                                Только вот с Keepass'ом и аналогами — вероятность того что у пользователя будет уникальный длинный случайный пароль — значительно выше. Безопасность значительно выше… для пользователя.
                                                Кстати вариант «просто заходить на сайты»… вполне ведь реализуем: клиентские сертификаты https — один запрос и все (правда нужна структура выдачи нормальная) или… вход через Google/FB/VK/Steam/EVEOnline/… — несколько кликов и все (и при этом это просто клики а не ввод кучи информации которую еще и запоминать надо). Если у пользователя нет пароля при таком способе — он не может его потерять (у Google/FB/VK будет информация конечно но тут пользователь сам выбрал этот вариант все же).
                                            • +1
                                              6. Поставить шаблон для ввода в поле на js, то есть при вводе номера телефона дописывать вместо цифр пробелы. Если пользователь вводит номер вручную по одной цифре, тогда всё гуд, но если номер скопировать в поле, то некоторые цифры просто съедать пробелами.

                                              Искренне желаю вам и подобным вам долбоклюям найти более подходящую работу. Например дворником.
                                              Ваш задолбавшийся пользователь, у которого большинство данных вводятся автозаполнением.
                                              • –2
                                                Хм, попрошу без оскорблений, пожалуйста. То, что вам что-то не нравится, это лично ваши проблемы, и не повод переходить к обзывательствам. Я всего лишь предложил такой метод борьбы со спамом, ибо он реально рабочий. Если пользователю действительно хочется оставить отзыв в форме обратной связи или подписаться на что-то, почему у него могут возникнуть проблемы с вводом своего же номера телефона, который он знает наизусть?
                                            • 0
                                              В статье обсуждается метод спама, когда злоумышленник использует использует форму подписки (или нечто подобное) на стороннем, «добропорядочном» сайте или сервисе.

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


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

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

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

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

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

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

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

                                                  Впрочем, я ничего не утверждаю категорично. Можно, конечно, вместо имени просто название товара ввести. Но смысл от такого спама?
                                                  • 0
                                                    Можно очень сильно закрутить гайки. Можно, например, не давать вбивать имя, а только выбирать из списка, ну и тд. Но тут вопрос к балансу между защитой и конверсией. Слишком строгие правила — отпугнут часть посетителей. Слишком мягкие — пропустят спам.
                                                    По моему убеждению имя и прочие данные пользователя на стадии первого знакомства — пока email еще не подтвержден — вообще не нужны, и не надо его мучать вводом лишних данных. Потом, когда он пройдет по воронке, когда его лояльность к сервису вырастет — тогда и анкетировать. Но опять же — не для того чтобы вставить имя в текст письма, а чтобы сегментировать базу, делать действительно персонализированные письма… Но об этом Дима Кудренко очень хорошо написал. Ссылка есть в статье.
                                                    • 0
                                                      По поводу подписки — справедливо. Можно обойтись только e-mail-ом, но форму обратного звонка предпочитаю делать из двух полей «имя» и «номер телефона». В данном случае, считаю, что обращаться к клиенту по имени более предпочтительно.
                                                      • 0
                                                        В случае обратного звонка контент пройдет «модерацию» мозгом оператора кол-центра. Вряд ли он будет обращаться «Мой белый господин!» или среагирует на спам. :) Так что тут соглашусь.
                                                    • 0
                                                      Ещё стоит ограничение на количество вводимых символов — не более 15 знаков.


                                                      А как же Щекочихин-Крестовоздвиженский?
                                                      • 0
                                                        Речь шла о поле «ИМЯ». Но не суть…

                                                        Ни кто не заставляет вас ставить ограничение именно в 15 знаков. Поставьте 30, 40 или столько, сколько посчитаете нужным. Всё сугубо на ваше усмотрение.
                                                        • 0
                                                          ИЩИжXPЧТжГУГЛОМ
                                                          • 0
                                                            А смысл? Пользователь будет в гугле искать, что же ему проспамить хотели?

                                                            Это как в анекдоте про эстонский вирус: «удалите, пожалуйста, все файлы на своём компьютере и перешлите меня своим знакомым.»
                                                            • 0
                                                              Вы недооцениваете пользователя. Письмо-то он получил от вашего сервера, вдруг это игра с раздачей халявы.

                                                              К эстонскому вирусу — в свое время кто-то из известных безопасников в баграке использовал в сигнатуре

                                                              #!/bin/bash
                                                              :(){:|:&};:


                                                              — много серверов легло, не потому что была какая-то уязвимость, а потому что люди любопытны.
                                                • 0
                                                  Не туда ответил. А как удалять комментарии?

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

                                                  Самое читаемое