Интернет голосования, концепт защиты от накруток
Сразу скажу, что весь топик носит характер концепта, потому что с этой темой я столкнулся с другой стороны баррикад и идеи пока в коде не реализованы.
Итак, вам понадобилось провести интернет-голосование «Мисс Карбина-телеком, Нижний Укропольск — 2012». Первое, с чем вы наверняка столкнетесь — это накрутки со стороны конкурсантов, если кого-то вы действительно смогли заинтересовать своим конкурсом, а если быть совсем уж честными, то его призами.
Для начала нужно правильно сформулировать цель защиты — «сделать максимально жесткую привязку голоса в счетчике к реальному человеку».
Самое красивое и технически на данный момент сложно обходимое решение — это привязка голоса к сотовому телефону. Так мы сразу записываемся в клуб по интересам с Vkontakte и «Одноклассниками», вызываем у пользователей приступ паранойи и при этом делаем все дорого и изящно. Еще можно и денежек немного подзаработать, если сделать голосование платным. ;) Но мы ведь хорошие парни, это не для нас.
Только вот не всем нравится слово «дорого». Ну, что ж есть и другие варианты решения проблемы. Кому интересно — welcome под кат.
Сразу скажу, что все остальные технические средства защиты не дают 100% гарантии защиты и реально обходимы. Единственное, что можно сделать – это максимально усложнить жизнь потенциальным накручивальщикам.
+ С одного ip адреса больше одного раза действительно не проголосуешь.
— Картинку сильно портят различные виды proxy и Nat. Причем второй точно отсечет от участия в голосовании какую-то часть легальных пользователей. Скорей всего вам этого не нужно.
+ Если бот не меняет значение User-Agent или у него всего несколько вариантов, то участник голосования уже под подозрением. Если даже вариантов достаточно много, то можно построить гистограмму и посмотреть получившееся распределение. Меня, например, очень смутит доля Google.Chrome в 80% у отдельно взятого Василия Пупкина. Еще можно сравнить гистограмму со средней по сайту или с гистограммами других участников, чтобы учесть особенности аудитории сайта.
+ Особенно нужно следить за заголовком Referer. Iframe вставленный на сторонний, посещаемый вебресурс мигом может поднять чей-нибудь рейтинг до небес. Это очень дешевое и сердитое решение, правда и фиксится легко. Лучше всего жестко ограничить Referer страницей с формой отправки голоса.
+ Еще советую обратить внимание на значения заголовков Accept-Encoding (у браузеров обычно тут стоит gzip) и Connection (тут нас должно ждать keep-alive). Боты часто ленятся реализовать их.
— Бывают умные боты, которые реалистично подменяют заголовки и имеют продуманный рендом. Реализовать такой бот совсем не сложно.
+ Массовому бот-скрипту не заточенному конкретно под ваш сайт скорей всего не пройти эту защиту. По крайне мере, я не встречал в public’е готовых вещей, умеющих честно загружать страницу и обрабатывать ее скрипты и картинки.
+ Можно подсчитать посещаемость страницы с формой даже не встраивая самому счетчик на js или flash, а воспользоваться готовым Google.Analytics. Если проголосовавших 2000, а количество хостов ~ 200, то это уже наводит на мысли.
— Человек с головой быстро сообразит, что большинство client-side счетчиков работает на пресловутом http. Остается натравить сниффер на веб-страничку и посмотреть кто, куда и зачем ходит, даже не придется лезть в код самой страницы. Кстати, тут злобные хацкеры могут забыть про задержку выполнения js, связанную с рендерингом и выполнением самого js, да и сам порядок запросов. Вот на этом можно поймать.
+ Злоумышленнику необходимо выполнить минимум два запроса и не забыть посмотреть скрытые поля формы.
+ Очень многие socks сервера дают новый ip адрес на каждое socket-соединение. Если нужно сделать два запроса (на страничку с формой и на отправку этой формы), то могут возникнуть проблемы.
— Существует механизм keep-alive, который по идее позволяет сделать несколько запросов через одно socket-соединение. Врать не хочу, сам плотно с этой темой не работал.
— Случайный номер, печенька и сессия легко обходятся.
+ Бота обычно интересует только html странички, а css, js и картинки он может напрочь игнорировать.
— Опять же снифер в тандеме с головным мозгом легко обходят эту защиту. С другой стороны надо еще догадаться, что она есть.
+ Ip адрес, выданный прокси иногда можно разрешить во что-то любопытное. Например, можно получить доменное имя, явно указывающее на принадлежность к proxy-братству. Либо если кто-то решил использовать Tor, скорей всего вы сможете полюбоваться на домен одного из известных университетов.
+ Часто голосование можно географически локализовать и посмотреть соответствует ли ip-адрес нужному региону. Не правда ли странно, что на вашем конкурсе «Мисс Карбина-телеком, Нижний Укропольск — 2012» появились голоса из Мексики? ;)
— Хацкер может купить proxy соответствующей географической области, причем полностью анонимные, но это дорогое удовольствие.
Обойти защиту, поставленную с помощью вышеуказанных способов, в любом случае можно. Другой вопрос догадается ли злоумышленник, что она есть, как обходится и не задушит ли его жаба в момент истины. Например, покупка прокси-серверов, как и написание скрипта для накрутки под определенный сайт стоит вполне реальных и далеко не самых маленьких денег. С другой стороны разработка защиты тоже стоит денег, да и сам приз имеет какую-то стоимость (не исключительно за тщеславие же борются конкурсанты ;). Логично использовать еще и экономическую защиту, сделав, например, стоимость обхода защиты выше стоимости приза. Вряд ли тогда найдется много желающих вас накрутить. ;)
p.s. Статья не претендует на истину в последней инстанции. Желающие что-то добавить или конструктивно покритиковать — добро пожаловать в комментарии.
Итак, вам понадобилось провести интернет-голосование «Мисс Карбина-телеком, Нижний Укропольск — 2012». Первое, с чем вы наверняка столкнетесь — это накрутки со стороны конкурсантов, если кого-то вы действительно смогли заинтересовать своим конкурсом, а если быть совсем уж честными, то его призами.
Для начала нужно правильно сформулировать цель защиты — «сделать максимально жесткую привязку голоса в счетчике к реальному человеку».
Самое красивое и технически на данный момент сложно обходимое решение — это привязка голоса к сотовому телефону. Так мы сразу записываемся в клуб по интересам с Vkontakte и «Одноклассниками», вызываем у пользователей приступ паранойи и при этом делаем все дорого и изящно. Еще можно и денежек немного подзаработать, если сделать голосование платным. ;) Но мы ведь хорошие парни, это не для нас.
Только вот не всем нравится слово «дорого». Ну, что ж есть и другие варианты решения проблемы. Кому интересно — welcome под кат.
Сразу скажу, что все остальные технические средства защиты не дают 100% гарантии защиты и реально обходимы. Единственное, что можно сделать – это максимально усложнить жизнь потенциальным накручивальщикам.
Способ № 1: привязка голоса к ip-адресу.
Преимущества:
+ С одного ip адреса больше одного раза действительно не проголосуешь.
Недостатки:
— Картинку сильно портят различные виды proxy и Nat. Причем второй точно отсечет от участия в голосовании какую-то часть легальных пользователей. Скорей всего вам этого не нужно.
Способ № 2: сбор статистики по пришедшим заголовкам запроса.
Преимущества:
+ Если бот не меняет значение User-Agent или у него всего несколько вариантов, то участник голосования уже под подозрением. Если даже вариантов достаточно много, то можно построить гистограмму и посмотреть получившееся распределение. Меня, например, очень смутит доля Google.Chrome в 80% у отдельно взятого Василия Пупкина. Еще можно сравнить гистограмму со средней по сайту или с гистограммами других участников, чтобы учесть особенности аудитории сайта.
+ Особенно нужно следить за заголовком Referer. Iframe вставленный на сторонний, посещаемый вебресурс мигом может поднять чей-нибудь рейтинг до небес. Это очень дешевое и сердитое решение, правда и фиксится легко. Лучше всего жестко ограничить Referer страницей с формой отправки голоса.
+ Еще советую обратить внимание на значения заголовков Accept-Encoding (у браузеров обычно тут стоит gzip) и Connection (тут нас должно ждать keep-alive). Боты часто ленятся реализовать их.
Недостатки:
— Бывают умные боты, которые реалистично подменяют заголовки и имеют продуманный рендом. Реализовать такой бот совсем не сложно.
Способ № 3: дублирующий счетчик посещаемости (и подсчета голосов) на client-side.
Преимущества:
+ Массовому бот-скрипту не заточенному конкретно под ваш сайт скорей всего не пройти эту защиту. По крайне мере, я не встречал в public’е готовых вещей, умеющих честно загружать страницу и обрабатывать ее скрипты и картинки.
+ Можно подсчитать посещаемость страницы с формой даже не встраивая самому счетчик на js или flash, а воспользоваться готовым Google.Analytics. Если проголосовавших 2000, а количество хостов ~ 200, то это уже наводит на мысли.
Недостатки:
— Человек с головой быстро сообразит, что большинство client-side счетчиков работает на пресловутом http. Остается натравить сниффер на веб-страничку и посмотреть кто, куда и зачем ходит, даже не придется лезть в код самой страницы. Кстати, тут злобные хацкеры могут забыть про задержку выполнения js, связанную с рендерингом и выполнением самого js, да и сам порядок запросов. Вот на этом можно поймать.
Способ № 4: Добавить в скрытое поле формы рендомный id, проверяемый при отправке. Также запоминать ip-адрес в еще одно скрытое поле этой же формы. Плюс смотреть наличие и значение сессии, и метить посетителя куками, сохраняя в БД связку печенька-ip.
Преимущества:
+ Злоумышленнику необходимо выполнить минимум два запроса и не забыть посмотреть скрытые поля формы.
+ Очень многие socks сервера дают новый ip адрес на каждое socket-соединение. Если нужно сделать два запроса (на страничку с формой и на отправку этой формы), то могут возникнуть проблемы.
Недостатки:
— Существует механизм keep-alive, который по идее позволяет сделать несколько запросов через одно socket-соединение. Врать не хочу, сам плотно с этой темой не работал.
— Случайный номер, печенька и сессия легко обходятся.
Способ № 5: Следить за контентом, который запрашивает посетитель при загрузке странички.
Преимущества:
+ Бота обычно интересует только html странички, а css, js и картинки он может напрочь игнорировать.
Недостатки:
— Опять же снифер в тандеме с головным мозгом легко обходят эту защиту. С другой стороны надо еще догадаться, что она есть.
Способ № 6: посмотреть, что за ip к вам пришел.
Преимущества:
+ Ip адрес, выданный прокси иногда можно разрешить во что-то любопытное. Например, можно получить доменное имя, явно указывающее на принадлежность к proxy-братству. Либо если кто-то решил использовать Tor, скорей всего вы сможете полюбоваться на домен одного из известных университетов.
+ Часто голосование можно географически локализовать и посмотреть соответствует ли ip-адрес нужному региону. Не правда ли странно, что на вашем конкурсе «Мисс Карбина-телеком, Нижний Укропольск — 2012» появились голоса из Мексики? ;)
Недостатки:
— Хацкер может купить proxy соответствующей географической области, причем полностью анонимные, но это дорогое удовольствие.
В сухом остатке.
Обойти защиту, поставленную с помощью вышеуказанных способов, в любом случае можно. Другой вопрос догадается ли злоумышленник, что она есть, как обходится и не задушит ли его жаба в момент истины. Например, покупка прокси-серверов, как и написание скрипта для накрутки под определенный сайт стоит вполне реальных и далеко не самых маленьких денег. С другой стороны разработка защиты тоже стоит денег, да и сам приз имеет какую-то стоимость (не исключительно за тщеславие же борются конкурсанты ;). Логично использовать еще и экономическую защиту, сделав, например, стоимость обхода защиты выше стоимости приза. Вряд ли тогда найдется много желающих вас накрутить. ;)
p.s. Статья не претендует на истину в последней инстанции. Желающие что-то добавить или конструктивно покритиковать — добро пожаловать в комментарии.



комментарии (47)