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 :: Защита скрипта от несанкционированного вызова

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как защитить скрипт голосования
_tvlad
Отправлено: 21 Мая, 2012 - 12:52:14
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Подскажите, пожалуйста, способ защиты php скрипта голосования от несанкционированного вызова. Проверка HTTP_REFERER не помогает. Вызовы генерируются программно, судя по частоте.
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 13:07:31
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча
 
 Top
DeepVarvar Супермодератор
Отправлено: 21 Мая, 2012 - 13:21:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я айпишник писал и агента - пусть хоть обдидосится...
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 13:28:52
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




с разных агентов но одного ип нечастые запросы пропускал?))
 
 Top
Zuldek
Отправлено: 21 Мая, 2012 - 13:36:20
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




а в чем проблема с разных ипов проголосовать? Улыбка
Онли сессии + регистрация.
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 13:37:37
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
ну или каптча

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

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

Регистрации принципиально нет (заказчик не всхотел).
Сессии я использую, чтобы не позволить бесконечно нажимать на кнопку голосования. Хотя, никто не мешает проголосовать с другого браузера или перезагрузить этот. Против таких мелких "нарушений" я ничего поделать не могу и заказчика об этом предупредил.
А сейчас я говорю о сотнях и тысячах "накрученных" голосов, что невозможно сделать, нажимая на кнопку на сайте. Скрипт запускается каким-то другим способом, и я не знаю, как его отловить.
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 13:51:26
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
я два раза не повторяю не повторяю
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 14:09:49
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




LIME пишет:
LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))
я два раза не повторяю не повторяю

Дык я ж сказал, что обращение к скрипту происходит не со страницы голосования. Там можно только один раз нажать на кнопку, и она становится неактивной. Такие частые вызовы скрипта (по нескольку раз в секунду) можно делать только программно (хотя, я не знаю, как, а то бы знал, как защититься). А с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.
Какие-то хакерские штучки.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Мая, 2012 - 14:16:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Zuldek пишет:
Онли сессии

А зачем роботу вообще куки передавать?

Просто и довольно действенно - капча. Но некрасиво.

Как вариант - привязывайтесь к вычислению чего-нибудь на JS, роботы его обычно не выполняют. А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
При этом обязательно отрабатывайте нормально, не прерывайте чем-то вроде die("уйди, противный!"); Но не засчитывайте голос в реальности. Это даст ещё некоторое время, пока атакующий вообще заметит отсутствие реакции.

А если атака идёт с определённого пула ip - можно именно им выдавать из желаемые накрученные значения. А всему остальному миру - нормальные.
Т.е. чем позже атакующий поймёт, в чём же тут дело и по какому критерию отсеиваются роботы - тем лучше.


-----
PostgreSQL DBA
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 14:19:32
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




LIME пишет:
при открытии страницы с голосованием писать в сессию время открытия и инфу
потом при ответе смотреть как шустро ответил
если успел за десятую секунды то ....))

О! Твой ответ навел меня на простую мысль: На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса. Если он голосует не с моей страницы, то ее там не будет. К содержимому сессии-то у него нет доступа!
Сработает, как думаешь? Или ты про это и говорил, да я не понял?
(Добавление)
Мелкий пишет:
Zuldek пишет:
Онли сессии

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

А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий. То есть, он все-таки открывает страницу голосования? И тогда мои ухищрения с сессионной переменной не пройдут?
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 14:26:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))
 
 Top
Мелкий Супермодератор
Отправлено: 21 Мая, 2012 - 14:26:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




_tvlad пишет:
хотя, я не знаю, как, а то бы знал, как защититься

Неа. Не помогло бы. Ограничение самого протокола HTTP.
HTTP - протокол не сессионный. И единственный способ отслеживать пользователя - навязать тому необходимость себя идентифицировать.

_tvlad пишет:
с другой стороны, HTTP_REFERER содержит правильную информацию, похоже, она подделывается.

Не просто подделывается, а элементарно подделывается.

_tvlad пишет:
На странице голосования писать в сессию любую переменную, которую потом проверять скриптом обработки голоса.

Робот правится за 5 минут под этот случай.
Но сделать это надо всё равно. Все остальные защиты - только усложнённые вариации этой.
(Добавление)
_tvlad пишет:
А вот это интересно про робота. Не могли бы вы чуть подробнее описать алгоритм его действий.

Простейший случай:
0) создаёте скрытое поле формы, обязательно с не говорящим названием, какой-нибудь time, например
1) на стороне php пишете туда чего-нибудь, для достоверности. Придерживаясь названия - текущий timestamp
2) вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию
3) в скрипте голосования проверяете, совпадает ли пришедшее значение с сохранённым в сессию

Потом усложняете, высчитываете какой-нибудь логарифм или ещё чего.


-----
PostgreSQL DBA
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 14:41:36
Post Id


Новичок


Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




LIME пишет:
АЛИЛУЙААА!!!
только еще про время отрытия пойми и я щаслиф
и мелкого перечитай...там есть что еще понять))

Дошло и про время. Робот не ждет, пока загрузятся все картинки, прально я понял? Спасибо!
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 14:43:35
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а человек не только ждет а еще вопросы читает и думает))
(Добавление)
Мелкий пишет:
А при хаотичном использовании нескольких разных алгоритмов можно подарить атакующему незабываемые мгновения исправления робота.
 
 Top
EuGen Администратор
Отправлено: 21 Мая, 2012 - 14:46:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Показывать некорректную статистику по адресам (то есть желаемую для тех, кто накручивает) - не совсем верное решение, так как в случае NAT провайдера (99% вероятность) пострадают нормальные пользователи.
Мелкий пишет:
вставляете на страницу JS, который при открытии страницы заменит содержимое поля на другое значение. И сохраняете желаемое значение в сессию

От себя добавлю - желательно этот js-скрипт "обфусцировать", то есть поместить во-первых, в отдельный файл с незначащим именем вместе с другими js-функциями страницы (если их там 50-100, то это сильно усложнит понимание скрипта злоумышленником), и во-вторых - приведение js к плохочитаемому виду (как это сделано, например, здесь)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB