Способы защиты от накрутки голосований

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

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

Давайте разберем основные типы защиты голосований

Проверка по IP пользователя и отдача разного контента

Проверка заключается в предварительном записывании IP каждого, кто голосовал в базу данных и при каждом запросе страницы производится проверка "текущего адреса пользователя" с уже имеющимися записями.

Если IP адрес текущего пользователя уже имеется в базе, то юзеру отдается контент (страница) совершенно другого типа ("например: Вы уже голосовали") или другого типа. Если совпадений в базе данных нет, то предоставляется возможность отдать свой голос.

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

Ограничение Гео локации IP адресов

Довольно эффективная защита, которая показывает себя на практике при значительных кол-вах голосов (более 1000 шт.). Почему именно более 1000 шт.? потому что в интернете есть порядка 10-15 ресурсов продающих proxy за умеренную плату. Например средняя цена 2000 прокси на 30 дней составляет порядка 1500-2000р.

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

Блокировка всех IP адресов (навсегда, до окончания голосования), поможет избавиться от таких накрутчиков т.к. 1000 шт. proxy, это максимум что смогут накрутить пользователи, далее голосовать придется только живым пользователям. Для применения защиты, достаточно ограничивать Гео IP адресов, например только из России, Украины, Казахстана, голоса отданных с других Гео - просто отклонять.

Применение файлов cookies (очень слабая защита)

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

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

Применение различной капчи (разгадывание разных рисунков, цифр, математических операций)

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

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

Например: "Выберите животное имеющее 4 ноги: лось, страус, курица, гусь", правильным ответом является ЛОСЬ, но вот разгадать такую капчу автоматизированно представляется сложным т.к. заложить логику работы для голосования можно только для пары фраз, а что делать если подобных ответов порядка 1000 шт.?

Согласитесь - задача уже слишком сложная. Хотя человеку разгадывать такие капчи очень просто, они не требуют большого умственного и "глазного" труда (об этом ниже).

Что же мы понимаем под "глазным трудом" - это тот фактор, который редко учитывают при выставлении защиты, существуют типы капчи (картинок), которые человек разгадывает с трудом:

капча номер 1
И есть которые довольно просты в разгадывании человеком, но трудны роботам (ввиду наличия определенных шумовых элементов)
капча номер 2
Как видите, такие картинки намного проще воспринимаются человеком!

Принимать данные только POST-ом, исключать данные от GET запросов

До этого, мы уже говорили про дополнительную фильтрацию трафика и исключения прямых POST запросов (для этого например можно создать переменные cookies, которые будут генерироваться располагающимся на странице JavaScript-ом, в таком случае прямая "долбежка" сервера запросами не получится.

Также следует исключать простые get запросы (обычные переходы по ссылкам), т.к. они значительно облегчают накрутку.

Проверять реферер (referer)

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

Например на php, это делается всего 1-ой строкой:

$url = getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель

Далее, при анализе Вы сможете понять откуда приходят люди, которые голосуют за человека (может быть это вовсе реклама на сервисах CAP заданий, платных заданий), такие ресурсы обычно передают свой реферер без всяких дополнительных чисток и без труда выявляются.

Скрытие алгоритма голосования

Никогда не показывать результат после отдачи голоса, или обновлять результаты например раз в сутки. Отдавая "обновленную" страницу пользователю сразу, Вы сами стимулируете его "попробовать" накрутить голосование.

При скрытии алгоритма, отдачей, например фразой: "Ваш голос будет учтен, после проверки", вы застрахованно уберегаете накрутчиков от любых попыток, т.к. провести быстрые тесты никак не получится.

Обфускация кода javascript

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

alert('site');
будет выглядеть так:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0("1");',2,2,'alert|site'.split('|'),0,{}))
Согласитесь, что читабельность кода многим уже кажется не очень приятной, и возиться с ним довольно таки не приятно, а если этот код будет еще длиннее, то очень сильно затруднится анализ!

Проверка событий клавиатуры

Дополнительно вводить проверку на события мышки и клавиатуры пользователей, тем самым фильтруя различные программы для накрутки:

  1. mousedown - кнопка мыши нажата над элементом
  2. mouseup - кнопка мыши отпущена над элементом
  3. mouseover - мышь появилась над элементом
  4. mouseout - мышь ушла с элемента
  5. mousemove - каждое движение мыши над элементом генерирует это событие
Проверка одного из таких событий (или сразу нескольких, парно связанных), значительно усложняет анализ. Например если пользователь отдал голос, а два события не были отданы, просто не учитывать такие голоса на сервере, либо писать что "Голос будет учтен", но на самом деле запрос не учитывать. Этим Вы собьете с толку 90% накрутчиков.

Применение различных уловок

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

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

Например определение данных браузера, делается на JavaScript довольно просто:


        document.write("Кодовое имя браузера: "+navigator.appCodeName);
document.write("Имя браузера: "+navigator.appName);
document.write("Версия браузера: "+navigator.appVersion);
document.write("Язык: "+navigator.language);
document.write("Платформа: "+navigator.platform);
document.write("Полное название браузера: "+navigator.userAgent);
Вот что показывает данный скрипт, о Вашем браузере:


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

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