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

 PHP.SU

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


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

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


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


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


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




дополню
писать в скрытые поля этим js следует значение привязаное к ip(например md5(IP))
иначе по трафику отследят нужное значение
а так для машины злохакера оно будет одним(всегда!) а для других всех будет отличаться

(Отредактировано автором: 21 Мая, 2012 - 14:54:01)

 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 14:54:07
Post Id


Новичок


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


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




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

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

С JS я совсем мало знаком, но попробую разобраться.
А при просмотре кода страницы JS разве не просматривается? Или можно подключить функцию из внешнего файла?
В общем, попробую. Большое спасибо!
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 14:56:50
Post Id


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


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


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




думаю надо пояснить
заметив одно постоянное значение хакер его пропишет в робота
и подменив ip(прокси) значение поля может не сменить
соответственно будем знать кто пришел))
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 15:07:43
Post Id


Новичок


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


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




LIME пишет:
дополню
писать в скрытые поля этим js следует значение привязаное к ip(например md5(IP))
иначе по трафику отследят нужное значение
а так для машины злохакера оно будет одним(всегда!) а для других всех будет отличаться

Дело осложняется тем, что у него не постоянный IP, а динамический. Был бы постоянный, я бы его тупо запретил. Он заходит от двух разных провайдеров и в каждом случае - динамически назаначаемые адреса.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Мая, 2012 - 15:18:32
Post Id



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


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


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




Таймштамповая мысль - человеческий глаз далеко не сразу осознаёт разницу между парой таймштампов, их читать неудобно.
Поэтому мы можем в поле писать время старта, на стороне JS как-нибудь хитро вычислить небольшое число, прибавить это число к таймштампу и проверять в обработчике, что таймштамп должен быть не вставленный в поле, а новый (+ совпадать с тем, что сохранён в сессии как нужный после преобразования).

Так будет видимость всё тех же значений и заметить подвох при анализе запроса - не просто.

_tvlad пишет:
А при просмотре кода страницы JS разве не просматривается?

Отлично просматривается. И все подгружаемые файлы - тоже. И аяксовые. Всё, что видно юзеру - ему доступно.
И потому эта гонка вооружений нескончаема. То, что на той стороне человек, а не робот - достоверно не выяснить.


-----
PostgreSQL DBA
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 16:09:52
Post Id


Новичок


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


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




Мелкий пишет:
Поэтому мы можем в поле писать время старта, на стороне JS как-нибудь хитро вычислить небольшое число, прибавить это число к таймштампу и проверять в обработчике, что таймштамп должен быть не вставленный в поле, а новый (+ совпадать с тем, что сохранён в сессии как нужный после преобразования).

Что-то я слегка путаюсь. Значит, так:
1. При открытии страницы голосования я пишу в сессию время открытия. В обработчике фиксирую время голосования и сравниваю со временем открытия сессии. Если меньше секунды - робот. Это вроде ясно.
2. То же время открытия сессии, но в виде таймштампа, я пишу в скрытое поле формы. Затем с помощью процедуры JS изменяю это значение. По нажатию кнопки оно уходит в POST к обработчику. Как обработчик может его проверить? Ему нужно выполнить точно такие же вычисления, как и те, что были выполнены на JS, с сессионной переменной, которая содержит время открытия сессии (тогда имеет смысл и это значение сохранять в виде таймстампа).
Я всё правильно понял?
3. Привязка к IP. В еще одно скрытое поле я пишу зашифрованное значение IP... Дальше я не понимаю. У хакера IP меняется, при каждом подключении он будет видеть разные значения в этом поле и вряд ли станет зашивать туда фиксированную строку. Или как?
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 16:20:58
Post Id


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


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


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




3. Формируя алгоритм хакер наблюдает в скрытом поле строку
можно ее назвать правдоподобно например theme='14556879' (на самом деле формируется из IP)
причем она будет для него постоянна пока он не сменит ip
есть вероятность что он зашьет это значение в робот без парсинга поля
тогда робот с других ип будет слать некорректные значения
 
 Top
Мелкий Супермодератор
Отправлено: 21 Мая, 2012 - 16:24:30
Post Id



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


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


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




_tvlad пишет:
Я всё правильно понял?

Да, верно.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 16:27:33
Post Id


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


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


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




_tvlad пишет:
Если меньше секунды - робот
лучше посмотреть по логам с какой частотой сейчас обращается
анонимные прокси довольно медленные
лучше побольше
скажем 5 сек
(Добавление)
2. алгоритмы изменения поля можно делать разными
и в ту же сессию писать идентификатор алгоритма
 
 Top
Zuldek
Отправлено: 21 Мая, 2012 - 16:34:25
Post Id


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


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


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




Ещё, конечно, можно посмотреть с каких ипов голосует потенциальный бот. Если это анонимные прокси то их можно пробивать по открытым спискам, откуда их все и берут и сразу банить при запросе голосовалки.

Еще можно реализовать такую штуку, как задержка работы скрипта.
Принцип такой, что тык голосовалки можно только через N секунд после загрузки страницы. Причем N определяется случайным образом от 1 до 5-6 секунд (выбирается время приемлемое для конкретного приложения). если задержка больше секунды можно простенькое анимэ кнопки добавить или action-bar окончания временного порога, после которого голосование доступно становится.
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 16:36:12
Post Id


Новичок


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


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




LIME пишет:
3. Формируя алгоритм хакер наблюдает в скрытом поле строку
можно ее назвать правдоподобно например theme='14556879' (на самом деле формируется из IP)
причем она будет для него постоянна пока он не сменит ip
есть вероятность что он зашьет это значение в робот без парсинга поля
тогда робот с других ип будет слать некорректные значения

Понял. Постараюсь реализовать все пункты. Через некоторое время отчитаюсь.

В любом случае, все голоса у меня регистрируются по времени и IP, и есть уже несложный алгоритм, выкидывающий оттуда все накрутки. В конце акции придется его применить, но это, конечно, довольно не солидно, придется ковырять стол и оправдываться перед честными пользователями.
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 16:37:52
Post Id


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


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


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




Zuldek пишет:
или action-bar окончания временного порога,
ни в коем случае
так становится понятно что задержка отслеживается
и в принципе это вариация уже предложенного но на стороне клиента
а значит палимся
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 16:40:11
Post Id


Новичок


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


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




LIME пишет:
_tvlad пишет:
Если меньше секунды - робот
лучше посмотреть по логам с какой частотой сейчас обращается
анонимные прокси довольно медленные
лучше побольше
скажем 5 сек
(Добавление)
2. алгоритмы изменения поля можно делать разными
и в ту же сессию писать идентификатор алгоритма

Такая серия голосований идет с частотой до пяти раз в секунду.
Про алгоритмы - хорошая идея, спасибо.
 
 Top
LIME
Отправлено: 21 Мая, 2012 - 16:40:28
Post Id


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


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


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




Zuldek пишет:
Если это анонимные прокси то их можно пробивать по открытым спискам, откуда их все и берут и сразу банить при запросе голосовалки
хорошо бы
 
 Top
_tvlad
Отправлено: 21 Мая, 2012 - 16:52:25
Post Id


Новичок


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


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




LIME пишет:
Zuldek пишет:
Если это анонимные прокси то их можно пробивать по открытым спискам, откуда их все и берут и сразу банить при запросе голосовалки
хорошо бы

Я пока не знаю, что такое анонимные прокси. Его IP находятся в двух пулах адресов двух популярных у нас провайдеров.
 
 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