1. _tvlad - 21 Мая, 2012 - 12:52:14 - перейти к сообщению
Подскажите, пожалуйста, способ защиты php скрипта голосования от несанкционированного вызова. Проверка HTTP_REFERER не помогает. Вызовы генерируются программно, судя по частоте.
2. LIME - 21 Мая, 2012 - 13:07:31 - перейти к сообщению
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
3. DeepVarvar - 21 Мая, 2012 - 13:21:19 - перейти к сообщению
Я айпишник писал и агента - пусть хоть обдидосится...
4. LIME - 21 Мая, 2012 - 13:28:52 - перейти к сообщению
с разных агентов но одного ип нечастые запросы пропускал?))
5. Zuldek - 21 Мая, 2012 - 13:36:20 - перейти к сообщению
а в чем проблема с разных ипов проголосовать? ![Улыбка Улыбка](./im/emoticons/smile24.gif)
Онли сессии + регистрация.
![Улыбка Улыбка](./im/emoticons/smile24.gif)
Онли сессии + регистрация.
6. _tvlad - 21 Мая, 2012 - 13:37:37 - перейти к сообщению
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
Капча и авторизация не входит в задачу.
А промежутки между голосованиями с одного IP я отслеживаю, но не могу поставить запрет на слишком короткие из-за наличия коллективных мест доступа в сеть через один роутер.
Нужно что-то более хитроумное. Например, скрыть как-то URL скрипта, тогда к нему был бы возможен только официальный доступ. Но не знаю, возможно ли это вообще. Ведь URL легко определяется при просмотре html кода страницы голосования.
(Добавление)
Zuldek пишет:
а в чем проблема с разных ипов проголосовать? ![Улыбка Улыбка](./im/emoticons/smile24.gif)
Онли сессии + регистрация.
![Улыбка Улыбка](./im/emoticons/smile24.gif)
Онли сессии + регистрация.
Регистрации принципиально нет (заказчик не всхотел).
Сессии я использую, чтобы не позволить бесконечно нажимать на кнопку голосования. Хотя, никто не мешает проголосовать с другого браузера или перезагрузить этот. Против таких мелких "нарушений" я ничего поделать не могу и заказчика об этом предупредил.
А сейчас я говорю о сотнях и тысячах "накрученных" голосов, что невозможно сделать, нажимая на кнопку на сайте. Скрипт запускается каким-то другим способом, и я не знаю, как его отловить.
7. LIME - 21 Мая, 2012 - 13:51:26 - перейти к сообщению
LIME пишет:
я два раза не повторяю не повторяю
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
8. _tvlad - 21 Мая, 2012 - 14:09:49 - перейти к сообщению
LIME пишет:
LIME пишет:
я два раза не повторяю не повторяюпри открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
Дык я ж сказал, что обращение к скрипту происходит не со страницы голосования. Там можно только один раз нажать на кнопку, и она становится неактивной. Такие частые вызовы скрипта (по нескольку раз в секунду) можно делать только программно (хотя, я не знаю, как, а то бы знал, как защититься). А с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.
Какие-то хакерские штучки.
9. Мелкий - 21 Мая, 2012 - 14:16:43 - перейти к сообщению
Zuldek пишет:
Онли сессии
А зачем роботу вообще куки передавать?
Просто и довольно действенно - капча. Но некрасиво.
Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
При этом обязательно отрабатывайте нормально, не прерывайте чем-то вроде die("уйди, противный!"); Но не засчитывайте голос в реальности. Это даст ещё некоторое время, пока атакующий вообще заметит отсутствие реакции.
А если атака идёт с определённого пула ip - можно именно им выдавать из желаемые накрученные значения. А всему остальному миру - нормальные.
Т.е. чем позже атакующий поймёт, в чём же тут дело и по какому критерию отсеиваются роботы - тем лучше.
10. _tvlad - 21 Мая, 2012 - 14:19:32 - перейти к сообщению
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
О! Твой ответ навел меня на простую мысль: На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса. Если он голосует не с моей страницы, то ее там не будет. К содержимому сессии-то у него нет доступа!
Сработает, как думаешь? Или ты про это и говорил, да я не понял?
(Добавление)
Мелкий пишет:
Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
Zuldek пишет:
Онли сессии
Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий. То есть, он все-таки открывает страницу голосования? И тогда мои ухищрения с сессионной переменной не пройдут?
11. LIME - 21 Мая, 2012 - 14:26:04 - перейти к сообщению
АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
12. Мелкий - 21 Мая, 2012 - 14:26:06 - перейти к сообщению
_tvlad пишет:
хотя, я не знаю, как, а то бы знал, как защититься
Неа. Не помогло бы. Ограничение самого протокола HTTP.
HTTP - протокол не сессионный. И единственный способ отслеживать пользователя - навязать тому необходимость себя идентифицировать.
_tvlad пишет:
с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.
Не просто подделывается, а элементарно подделывается.
_tvlad пишет:
На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса.
Робот правится за 5 минут под этот случай.
Но сделать это надо всё равно. Все остальные защиты - только усложнённые вариации этой.
(Добавление)
_tvlad пишет:
А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий.
Простейший случай:
0) создаёте скрытое поле формы, обязательно с не говорящим названием, какой-нибудь time, например
1) на стороне php пишете туда чего-нибудь, для достоверности. Придерживаясь названия - текущий timestamp
2) вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию
3) в скрипте голосования проверяете, совпадает ли пришедшее значение с сохранённым в сессию
Потом усложняете, высчитываете какой-нибудь логарифм или ещё чего.
13. _tvlad - 21 Мая, 2012 - 14:41:36 - перейти к сообщению
LIME пишет:
АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
Дошло и про время. Робот не ждет, пока загрузятся все картинки, прально я понял? Спасибо!
14. LIME - 21 Мая, 2012 - 14:43:35 - перейти к сообщению
а человек не только ждет а еще вопросы читает и думает))
(Добавление)
(Добавление)
Мелкий пишет:
А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
15. EuGen - 21 Мая, 2012 - 14:46:47 - перейти к сообщению
Показывать некорректную статистику по адресам (то есть желаемую для тех, кто накручивает) - не совсем верное решение, так как в случае NAT провайдера (99% вероятность) пострадают нормальные пользователи.
От себя добавлю - желательно этот js-скрипт "обфусцировать", то есть поместить во-первых, в отдельный файл с незначащим именем вместе с другими js-функциями страницы (если их там 50-100, то это сильно усложнит понимание скрипта злоумышленником), и во-вторых - приведение js к плохочитаемому виду (как это сделано, например, здесь)
Мелкий пишет:
вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию
От себя добавлю - желательно этот js-скрипт "обфусцировать", то есть поместить во-первых, в отдельный файл с незначащим именем вместе с другими js-функциями страницы (если их там 50-100, то это сильно усложнит понимание скрипта злоумышленником), и во-вторых - приведение js к плохочитаемому виду (как это сделано, например, здесь)