К содержанию

Разбор5 мин чтения

Онлайн-голосование без накруток — как это устроено

Как накручивают голосования, что против этого работает, а что нет, и какие решения нужно принять до разработки. На примере премии, где отдали 142 868 голосов.

Нуралы КопбосынДизайнер и разработчик цифровых продуктов · 8 лет, 80+ проектов
Содержание6 разделов
  1. Как накручивают онлайн-голосования
  2. Сначала правило — что такое «один голос»
  3. Вход через аккаунт — главный рубеж
  4. Проверка каждого голоса на сервере
  5. Инструменты организатора и честный результат
  6. Как это было в Freedom Ticketon Awards

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

Как накручивают онлайн-голосования

Любое публичное голосование будут пытаться накрутить — это вопрос не «если», а «когда». Перед Freedom Ticketon Awards я сначала разобрал схемы, от которых нужно защищаться, и только потом проектировал защиту — разбор у меня всегда идёт раньше дизайна. Основных схем три:

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

Против каждой схемы своя защита, и универсальной кнопки «антифрод» не существует. Есть и четвёртая схема, против которой код почти бессилен: живые люди, которых попросили проголосовать или которым заплатили за голос. О ней — ниже.

Сначала правило — что такое «один голос»

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

Ответ влияет на всё остальное. Если голос — от человека, его нужно как-то узнавать. Если голосовать можно каждый день, нужно хранить историю голосов. Если голос есть в каждой номинации, проверять приходится по каждой отдельно. Правило лучше опубликовать вместе с условиями голосования: тогда у организатора есть основание аннулировать голоса, которые его нарушают.

Вход через аккаунт — главный рубеж

Самая слабая защита — голосование без входа. Метка в браузере стирается за секунду, и один человек голосует сколько угодно раз.

Вход через аккаунт поднимает цену обмана. В Freedom Ticketon Awards голосовали через вход Google: создать пачку настоящих аккаунтов Google заметно сложнее, чем пачку почтовых адресов. А для честного голосующего это несколько касаний, без паролей и форм. Можно добавить и другие привычные способы входа, но каждый новый способ — это ещё одна дверь, которую нужно охранять.

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

Вход через аккаунт — это ещё и персональные данные: имя и почта. Собирать стоит только то, что нужно для проверки голоса, хранить аккуратно и честно написать об этом в правилах голосования.

Проверка каждого голоса на сервере

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

Кроме отдельного голоса, важно видеть картину целиком. Резкий всплеск голосов за одного номинанта, новые аккаунты, которые голосуют только за него, запросы без признаков живого человека — всё это заметно, если система записывает не только итог, но и то, как он складывался. Конкретные правила под каждую премию свои, и публиковать их — значит подсказать, как их обойти. Перед запуском полезно самому попробовать накрутить голосование теми же способами, что и злоумышленник: всё, что получилось у вас, получится и у них.

Отдельная тема — пиковая нагрузка. Голоса приходят волнами: после анонса, эфира, поста популярного номинанта. Если сайт упал в этот момент, он теряет не только голоса, но и доверие — люди решат, что «всё подкручено». Поэтому нагрузку закладывают с первого дня: кеширование, очереди, запас мощности. Проверять это нужно до старта, а не в вечер анонса. Так я строю все веб-платформы, где ждут пиков.

Инструменты организатора и честный результат

Админ-панель — тоже часть защиты. Организатор должен управлять номинациями, видеть голосующих и результаты, а при подозрении — разбираться в конкретных голосах и аннулировать те, что нарушают правила. Каждое такое решение стоит записывать: кто, когда и почему. Тогда итог можно объяснить участникам, а не просто объявить. А журнал голосов и решений стоит сохранить и после премии: если кто-то оспорит результат, ответ будет в данных, а не в чьей-то памяти.

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

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

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

Как это было в Freedom Ticketon Awards

Freedom Ticketon Awards — казахстанская премия в области культуры и искусства, где победителей выбирают зрители. Продукт здесь — не сайт, а доверие к результату. Срок был жёсткий: дата премии не двигается. Поэтому защита была частью первой версии, а не планом на потом. Я сделал дизайн, фронт, бэк, антифрод, админку и наполнил каталог номинантов. От нуля до запуска — три с половиной недели. Итог — 142 868 голосов, премия состоялась.

Если вы готовите премию, конкурс или народное голосование, начните не с дизайна страницы, а с правила «один голос» и списка схем, от которых будете защищаться. Как я делаю платформы голосования, — на отдельной странице. Если сроки жёсткие, почитайте, как устроен MVP за 3–⁠6 недель. Другие проекты для медиа и событий — в разделе «Медиа, музыка и голосования».

Есть задача — напишите, разберём.

Опишите в двух словах, что нужно, — отвечу сам, без менеджеров и брифов на десять страниц.