#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.
Комментариев нет:
Отправить комментарий