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
Форумы портала PHP.SU :: Версия для печати :: Защита скрипта от несанкционированного вызова
Форумы портала PHP.SU » » Вопросы новичков » Защита скрипта от несанкционированного вызова

Страниц (4): [1] 2 3 4 »
 

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 - перейти к сообщению
а в чем проблема с разных ипов проголосовать? Улыбка
Онли сессии + регистрация.
6. _tvlad - 21 Мая, 2012 - 13:37:37 - перейти к сообщению
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча

Капча и авторизация не входит в задачу.
А промежутки между голосованиями с одного IP я отслеживаю, но не могу поставить запрет на слишком короткие из-за наличия коллективных мест доступа в сеть через один роутер.

Нужно что-то более хитроумное. Например, скрыть как-то URL скрипта, тогда к нему был бы возможен только официальный доступ. Но не знаю, возможно ли это вообще. Ведь URL легко определяется при просмотре html кода страницы голосования.
(Добавление)
Zuldek пишет:
а в чем проблема с разных ипов проголосовать? Улыбка
Онли сессии + регистрация.

Регистрации принципиально нет (заказчик не всхотел).
Сессии я использую, чтобы не позволить бесконечно нажимать на кнопку голосования. Хотя, никто не мешает проголосовать с другого браузера или перезагрузить этот. Против таких мелких "нарушений" я ничего поделать не могу и заказчика об этом предупредил.
А сейчас я говорю о сотнях и тысячах "накрученных" голосов, что невозможно сделать, нажимая на кнопку на сайте. Скрипт запускается каким-то другим способом, и я не знаю, как его отловить.
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 пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))

О! Твой ответ навел меня на простую мысль: На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса. Если он голосует не с моей страницы, то ее там не будет. К содержимому сессии-то у него нет доступа!
Сработает, как думаешь? Или ты про это и говорил, да я не понял?
(Добавление)
Мелкий пишет:
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-скрипт "обфусцировать", то есть поместить во-первых, в отдельный файл с незначащим именем вместе с другими js-функциями страницы (если их там 50-100, то это сильно усложнит понимание скрипта злоумышленником), и во-вторых - приведение js к плохочитаемому виду (как это сделано, например, здесь)

 

Powered by ExBB FM 1.0 RC1