Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Вопрос о безопасности - подделка POST-запросов, накрутка голосваний

#php #безопасность


Есть система, которая дает возможность проголосовать - вы нажимаете на кнопку "Поддержать",
отправляется запрос на сервер, увеличивается счетчик нажатий. Вопрос заключается в
следующем - запрос можно подделать... подскажите как в таких ситуация обычно делают?
Я имею в виду в глобальном смысле, то есть не именно для этой системы, а как обеспечить
безопасность запросов вообще? Какую хитрость нужно использовать? Что нужно отправлять?
Какие токены? Чтобы проверять все это на сервере, не подмена ли это. Спасибо.
    


Ответы

Ответ 1



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

Ответ 2



Существует много способов от этого защититься (и ещё больше - чтобы обойти :)). Можно заюзать токен - некая последовательность букаф, которые выдаются только на один запрос. Правда в случае подделки запроса не сильно поможет (но от CSRF вполне годен (тоже обходят)). Для защиты от голосования можно сделать так (сам никогда голосовалки не делал... что странно, кстати): В таблице голосования делаешь поле с... ID голосовавших, например. При попытке голосовать (пусть с токеном и вообще - это сам юзер хочет обхитрить систему), вытаскивать это поле, проверять наличие там ID текущего юзера и, если он найден, посылать от ворот поворот.

Ответ 3



Никак, хотя бы потому, что все методы взламываются очень легко: 1. Фильтр по IP: Заведите бота через TOP - новый запрос, новый IP; 2. Фильтр по токену: Бот просто будет делать два запроса; 3. Капча: Зависит от сложности, простая подбирается на ура, сложная плоха для юзабилити. Так что вы можете только использовать все три метода в надежде, что накрутчик не обработает их все. Так же в качестве усложнения могу предложить вариант, очень похожий на токены. При заходе на страницу генерируется сессия, в сессии генерируете уникальный ID (можно просто увеличивать на 1 от предыдущего). При запросе без сессии возвращать, что голос успешно отправлен, но на деле не отправлять его. При запросе с сессией проверять ID, было ли голосование с него, если было, то возвращать ошибку. Но это лишь легкая маскировка работы с токенами.

Ответ 4



Ответ "в глобальном смысле" уже дали - НИКАК. Судя по странным ответам, эту простую истину понимают не все. А точнее понимают, но как-то не до конца. В итоге получаются бессмысленные ответы вида "Токены не помогают, но вот как их реализовать...". Если же говорить о защите голосования, то здесь есть только две стратегии: Либо вообще никак специально не защищаться, просто ставить куку для удобства уже проголосовавших, а потом по логам отсекать накрутчиков. Либо вводить уже тяжелую артиллерию типа капчи смс-голосования. Середины - это важно понимать - не существует. Все эти игру в бирюльки с токенами и IP совсем не затруднят ботоводов, но только затруднят их отлов.

Ответ 5



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

Ответ 6



Самый удобный как вебмастеру, так пользователю способ отличить человека от бота - сделать что-то наподобие скрытого поля в form-е для отправки запроса, заполняемого javascript-ом. Чтобы подделать такой запрос, понадобится полнофункциональный браузер. К сожалению, боты, способные на эмуляцию джаваскрипта и продвинутое изображение из себя браузера тоже иногда встречаются. От них этот способ не спасет. Как вариант борьбы с такими товарищами можно усилить ограничения по отправке с одного IP-адреса и блокировать прокси, висящие в blacklist-е IP-адреса, соответствие часового пояса IP-адресу, соответствие его IP-адресу, сообщаемому плагинами, соответствие IP-адреса DNS-у... Но даже все это можно обойти. К сожалению, универсальной защиты нет. Даже CAPTCHA вас полностью не спасет - даже самую сложную капчу сможет расшифровать китаец за четверть цента =) Другое дело, что если ваш ресурс не особо популярен, то на него, скорее всего, не забредут даже набиватели голосов с ботами, эмулирующими браузер. Так что излишняя паранойя вам тоже ни к чему.

Ответ 7



Если у вас есть лояльная аудитория, которая совершает какие-то действия на сайте, то можно учитывать голоса разных людей с разным весом. Например, на IMDB голос только что зарегистрированного будет значить меньше, чем голос старого пользователя с похожей на человеческую активность в течении года. Это сложнее обойти, чем токены и IP.

Комментариев нет:

Отправить комментарий