Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Защита скрипта от несанкционированного вызова
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012
Помог: 0 раз(а)
Подскажите, пожалуйста, способ защиты php скрипта голосования от несанкционированного вызова. Проверка HTTP_REFERER не помогает. Вызовы генерируются программно, судя по частоте.
LIME
Отправлено: 21 Мая, 2012 - 13:07:31
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
DeepVarvar
Отправлено: 21 Мая, 2012 - 13:21:19
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Я айпишник писал и агента - пусть хоть обдидосится...
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
с разных агентов но одного ип нечастые запросы пропускал?))
Zuldek
Отправлено: 21 Мая, 2012 - 13:36:20
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
а в чем проблема с разных ипов проголосовать?
Онли сессии + регистрация.
_tvlad
Отправлено: 21 Мая, 2012 - 13:37:37
Новичок
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012
Помог: 0 раз(а)
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
Капча и авторизация не входит в задачу.
А промежутки между голосованиями с одного IP я отслеживаю, но не могу поставить запрет на слишком короткие из-за наличия коллективных мест доступа в сеть через один роутер.
Нужно что-то более хитроумное. Например, скрыть как-то URL скрипта, тогда к нему был бы возможен только официальный доступ. Но не знаю, возможно ли это вообще. Ведь URL легко определяется при просмотре html кода страницы голосования. (Добавление)
Zuldek пишет:
а в чем проблема с разных ипов проголосовать?
Онли сессии + регистрация.
Регистрации принципиально нет (заказчик не всхотел).
Сессии я использую, чтобы не позволить бесконечно нажимать на кнопку голосования. Хотя, никто не мешает проголосовать с другого браузера или перезагрузить этот. Против таких мелких "нарушений" я ничего поделать не могу и заказчика об этом предупредил.
А сейчас я говорю о сотнях и тысячах "накрученных" голосов, что невозможно сделать, нажимая на кнопку на сайте. Скрипт запускается каким-то другим способом, и я не знаю, как его отловить.
LIME
Отправлено: 21 Мая, 2012 - 13:51:26
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
я два раза не повторяю не повторяю
_tvlad
Отправлено: 21 Мая, 2012 - 14:09:49
Новичок
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012
Помог: 0 раз(а)
LIME пишет:
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
я два раза не повторяю не повторяю
Дык я ж сказал, что обращение к скрипту происходит не со страницы голосования. Там можно только один раз нажать на кнопку, и она становится неактивной. Такие частые вызовы скрипта (по нескольку раз в секунду) можно делать только программно (хотя, я не знаю, как, а то бы знал, как защититься). А с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.
Какие-то хакерские штучки.
Мелкий
Отправлено: 21 Мая, 2012 - 14:16:43
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Zuldek пишет:
Онли сессии
А зачем роботу вообще куки передавать?
Просто и довольно действенно - капча. Но некрасиво.
Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
При этом обязательно отрабатывайте нормально, не прерывайте чем-то вроде die("уйди, противный!"); Но не засчитывайте голос в реальности. Это даст ещё некоторое время, пока атакующий вообще заметит отсутствие реакции.
А если атака идёт с определённого пула ip - можно именно им выдавать из желаемые накрученные значения. А всему остальному миру - нормальные.
Т.е. чем позже атакующий поймёт, в чём же тут дело и по какому критерию отсеиваются роботы - тем лучше.
----- PostgreSQL DBA
_tvlad
Отправлено: 21 Мая, 2012 - 14:19:32
Новичок
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012
Помог: 0 раз(а)
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
О! Твой ответ навел меня на простую мысль: На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса. Если он голосует не с моей страницы, то ее там не будет. К содержимому сессии-то у него нет доступа!
Сработает, как думаешь? Или ты про это и говорил, да я не понял? (Добавление)
Мелкий пишет:
Zuldek пишет:
Онли сессии
Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий. То есть, он все-таки открывает страницу голосования? И тогда мои ухищрения с сессионной переменной не пройдут?
LIME
Отправлено: 21 Мая, 2012 - 14:26:04
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
Мелкий
Отправлено: 21 Мая, 2012 - 14:26:06
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
_tvlad пишет:
хотя, я не знаю, как, а то бы знал, как защититься
Неа. Не помогло бы. Ограничение самого протокола HTTP.
HTTP - протокол не сессионный. И единственный способ отслеживать пользователя - навязать тому необходимость себя идентифицировать.
_tvlad пишет:
с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.
Не просто подделывается, а элементарно подделывается.
_tvlad пишет:
На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса.
Робот правится за 5 минут под этот случай.
Но сделать это надо всё равно. Все остальные защиты - только усложнённые вариации этой. (Добавление)
_tvlad пишет:
А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий.
Простейший случай:
0) создаёте скрытое поле формы, обязательно с не говорящим названием, какой-нибудь time, например
1) на стороне php пишете туда чего-нибудь, для достоверности. Придерживаясь названия - текущий timestamp
2) вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию
3) в скрипте голосования проверяете, совпадает ли пришедшее значение с сохранённым в сессию
Потом усложняете, высчитываете какой-нибудь логарифм или ещё чего.
----- PostgreSQL DBA
_tvlad
Отправлено: 21 Мая, 2012 - 14:41:36
Новичок
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012
Помог: 0 раз(а)
LIME пишет:
АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
Дошло и про время. Робот не ждет, пока загрузятся все картинки, прально я понял? Спасибо!
LIME
Отправлено: 21 Мая, 2012 - 14:43:35
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
а человек не только ждет а еще вопросы читает и думает)) (Добавление)
Мелкий пишет:
А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
EuGen
Отправлено: 21 Мая, 2012 - 14:46:47
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Показывать некорректную статистику по адресам (то есть желаемую для тех, кто накручивает) - не совсем верное решение, так как в случае NAT провайдера (99% вероятность) пострадают нормальные пользователи.
Мелкий пишет:
вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию
От себя добавлю - желательно этот js-скрипт "обфусцировать", то есть поместить во-первых, в отдельный файл с незначащим именем вместе с другими js-функциями страницы (если их там 50-100, то это сильно усложнит понимание скрипта злоумышленником), и во-вторых - приведение js к плохочитаемому виду (как это сделано, например, здесь)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.