Голос народа: как создавался самый резонансный проект NUR.KZ
Опубликовано:
Вот уже 4 года существует проект “Голос народа”, который полюбился читателям NUR.KZ за возможность с помощью голосования выразить свое мнение касательно работы акимов, министров, активных государственных деятелей, первых лиц национальных компаний, а также оценить качество жизни в городах Казахстана. Основной целью проекта является поддержание идеи президента Казахстана Касым-Жомарт Токаева об обеспечении диалога между государственными деятелями и населением страны.
"Голос народа" — проект-индикатор эффективности работы кандидатов, который обращает на себя внимание, и служит мотивацией для них повышать свою эффективность, сдерживать обещания и улучшать социальное самочувствие казахстанцев.
За время своего существования проект пережил много попыток обмануть систему и "накрутить" голоса с помощью ботов. Также немало было попыток взлома и атак. Каждый последующий запуск проекта вызывал все большую волну ботов, атак, ажиотажа, клеветы от некоторых кандидатов и общественного резонанса.
Каждый год проект улучшается, становится удобнее и безопаснее. В этом году проект претерпел наибольших изменений, в связи с чем команда NUR.KZ решила рассказать о тернистом пути развития проекта, проблемах, с которыми проект сталкивался и как эти проблемы решались.
Пилотный запуск проекта
Первый запуск планировали в начале 2017 года. Запуститься нужно было быстро, но ресурсов для разработки полноценного решения не было, поэтому в качестве платформы для проекта решили выбрать конструктор сайтов Tilda, а в качестве системы голосования – сервис Playbuzz. Этот сервис позволял создавать простые опросы.
Еще до запуска проекта, стало понятно, что такое решение недееспособно, поскольку Playbuzz не может запретить пользователю голосовать более одного раза в номинации, что было крайне важно для проекта.
Как команда ни старалась “срезать углы” и упростить разработку, в итоге пришли к тому, что придется создавать проект “с нуля”. Ресурсы команды разработки были ограничены и распланированы на много месяцев вперед.
Для экономии времени хотя бы на дизайне и верстке сайта, было решено использовать Bootstrap и сделать внешний вид сайта максимально простым. Доступна была только русскоязычная версия сайта.
Еще одной частью проекта была приватная административная часть, с помощью которой команда создавала номинации и добавляла в них кандидатов, их биографии и фотографии.
Пользователь мог поделиться своим мнением в социальных сетях. В таком случае его подписчики видели сообщение вида “Я считаю, что такой-то кандидат является самым активным акимом” и могли перейти на страницу номинации, чтобы оставить свои голоса.
Всего было три группы номинаций: “люди”, “города” и “факты” (проекты и дела).
Примеры номинаций в группе “люди”: самый активный министр, самый активный аким, гран-при персона года.
Примеры номинаций в группе “города”: самый красивый город, самый чистый город, город с лучшими дорогами.
Примеры номинаций в группе “факты”: проект года, самое резонансное высказывание, поступок года.
Важной частью сайта была страница “О проекте”, на которой объяснялись задача проекта, формула расчета рейтинга.
Также важным условием проекта была возможность пользователя голосовать за одного кандидата в номинации только один раз. Для того, чтобы ускорить запуск проекта, мы решили хранить данные о том, голосовал ли пользователь в номинации, прямо в браузере. Тогда этого казалось достаточно. Как же мы ошибались...
Запуск проекта и страстное желание быть первым в рейтинге побудило некоторых кандидатов прибегнуть к неэтичному поведению и “накрутить” свой рейтинг. Неустанные попытки атак и колоссальные накрутки рейтингов вынудили нас на полтора месяца приостановить проект, чтобы обеспечить большую устойчивость, а также изучить все логи серверов, определить накрутки и отменить эти голоса.
Нам пришлось немного отложить подсчет голосов – пересчитывать голоса не сразу, когда пользователь проголосовал, а с небольшой задержкой. Это было сделано, чтобы у авторов ботов не было возможности понять, работает их скрипт или же нет.
Так, если автор бота запускает бота и видит, что прибавился один голос – значит его бот сработал и его можно запускать массово. Таким образом мы забрали у желающих накрутить голоса с помощью ботов обратную связь и усложнили им работу.
С самого начала мы использовали CSRF токен, который гарантирует, что голос был добавлен именно с сайта, а не какой-то программой или скриптом.
Мы проверяли количество голосов в секунду с одного IP адреса. Мы понимали, что компании могут использовать один IP адрес, а значит работники таких компаний имели одинаковый IP адрес. Опытным путем, изучив логи серверов, мы определили допустимое количество запросов с одного IP адреса. Если с одного IP адреса количество запросов превышало допустимое, то такой IP адрес попадал в “серый” список. Все запросы из “серого” списка мы изучали вручную. Видели накрутку – отменяли голоса.
Кроме того, мы, разумеется, проверяли User Agent, то есть “подпись” браузера и отсекали несуществующие. IP адреса, с которых к нам приходили с несуществующих браузеров, мы добавляли в “черный” список, и голосовать они больше не могли. Но, опять же, мы не давали обратную связь злоумышленникам, то есть мы не говорили, что его голос не будет учтен. Таким образом, злоумышленники могли тратить большое количество денег на ботов впустую.
Мы наблюдали забавную ситуацию: два недобросовестных кандидата “накручивали” себе голоса и “топили” друг друга, голосуя “против”. В день могло “прилетать” по 5 тысяч голосов за кандидата и столько же против его конкурента. Эти данные не подтверждались количеством пользователей, которые посетили соответствующие страницы сайта. Мы молча наблюдали за их тщетной “гонкой”, ведь ни один такой голос учтен в итоге не был.
В целом, на наш взгляд, пилотный проект “Голос народа” прошел удачно, и мы остались довольны его результатами. Победители номинаций были награждены, и итоги проекта показывали по телевидению на одном из каналов Талдыкоргана. Мы все очень гордились успешным запуском проекта.
На нашем сайте NUR.KZ мы регулярно оповещали наших читателей о ходе голосования в разных номинациях. Разумеется, широко осветили итоги голосования. Об итогах голосования писали и местные СМИ в Талдыкоргане и Актау.
Последующие запуски
Положительные отзывы пользователей о проекте и его популярность помогли нам принять решение в пользу продолжения проекта - настолько резонансным он получился. Проект стал ежегодным. Немало сил ушло на важные доработки: добавление авторизации через соцсети, чтобы снизить количество ботов, “усложнив” им жизнь, и сделать голосование объективнее.
Кроме того, руководители проекта “Голос народа” решили ограничить голосование Республикой Казахстан, то есть разрешить голосовать только с казахстанских IP адресов. Если пользователь находился в Турции или РФ, то проголосовать он не мог. Однако при последующих запусках проекта, после многочисленных звонков и обращений в редакцию NUR.KZ от казахстанцев, проживающих или временно находящихся за границей и желающих участвовать в проекте, мы открыли голосование для казахстанцев, проживающих во всех странах мира.
После первого запуска проект освещался шире, чем прежде: снимали видеосюжеты, писали статьи, которые распространяли через все возможные платформы и социальные сети, чтобы как можно больше казахстанцев узнало о проекте. О проекте рассказывали и другие сайты.
Второй (2018 год) и третий (2020 год) запуски проекта прошли не менее успешно. Правда, теперь номинации ограничивались группами “люди” и “города”. Группу номинаций “факты” с проектами и делами решили убрать из-за низкой популярности.
Проект “Голос народа” сегодня
Сегодня проект “Голос народа 4.0” – это совершенно новый проект, написанный с чистого листа. Он стал частью сайта NUR.KZ, получив новый адрес и современный удобный дизайн.
Запуск четвертой версии был непростым. Новая версия могла выдержать в два раза больше пользователей, чем предыдущие версии. Однако и этого оказалось недостаточно. Большая популярность проекта и внезапный наплыв пользователей быстро исчерпали ресурс серверов, из-за чего проект был несколько минут недоступен. Мы доработали проект, чтобы он мог выдержать в 20 раз больше пользователей.
В новой версии проекта пользователь вместо одного голоса в номинации может отдать два голоса: один “за” и один “против”.
Результаты голосований теперь хранятся в привязке к социальной сети или номеру телефона – в зависимости от того, какой метод авторизации на сайте выбрал пользователь. Проголосовать с одного аккаунта за одного кандидата в одной номинации не выйдет.
Если пользователь уже зарегистрирован на сайте NUR.KZ по номеру телефона и авторизирован, то он может сразу перейти к голосованию. Для простоты голосования и получения дополнительных преимуществ, рекомендуем зарегистрироваться на сайте с помощью номера телефона. Такие пользователи смогут писать комментарии к статьям, а также без усилий находить интересные для них статьи благодаря нашей рекомендательной системе, разработанной командой Data Science.
Чтобы уберечься от ботов, мы стали использовать последнюю версию Google reCaptcha, которая с помощью искусственного интеллекта определяет, кто пытается проголосовать: пользователь или бот.
В текущей версии проекта мы решили упростить формулу подсчета голосов: количество голосов “за” минус количество голосов “против”.
Администраторы сайта по-прежнему регулярно просматривают логи, чтобы обнаружить возможные накрутки. В системе логируется каждый голос. Большое количество голосов за или против одного кандидата, которые были отданы разными аккаунтами социальных сетей (разными почтовыми адреса) за короткий промежуток времени или с одного IP адреса или с сомнительным user’s humanity rating – это возможный сигнал для администраторов, чтобы проверить почтовые ящики, аккаунты социальных сетей, IP адреса, подписи браузеров и прочее, используя техники Open source intelligence. Если обнаружится, что это голоса с так называемых “ботоферм”, фейковых аккаунтов и т.п., то такие голоса не будут учтены в голосовании.
В целом, вот такой путь прошел полюбившийся многим казахстанцам и немного “нашумевший” проект “Голос народа”. Надеемся, эта статья даст понять, что больше всего внимания мы уделили удобству пользователей и защите от накруток ботами. Проект еще далек от совершенства и нашего конечного видения – впереди множество улучшений и доработок. Следите за новостям на нашем сайте, чтобы оставаться в курсе событий.
Кстати, если Вы еще не участвовали в проекте “Голос народа 2021” и не оставили голос за своего любимого кандидата, то советуем поспешить, поскольку голосование открыто до конца сегодняшнего дня - 13 апреля.
Оригинал статьи: https://www.nur.kz/kak-rabotaet-nur-kz/1907443-golos-naroda-kak-sozdavalsya-samyy-rezonansnyy-proekt-nurkz/