Привет. Есть ли способ обезопасить себя от дерганий сервера по
ajax запросу. Пример например вот с городами из Вконтакте:
конечно Вконтакте с его серверами справится, но молодорй сервер?
Если написать скрипт который будет генерировать буквы в случайном порядке и грузить списки городов...как думаете, как можно противостоять этому?
Пробывал вводить и счетчик времени, и максимальное количество запросов с открытой страницы...везде какой-то колхоз получается.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
AlmazDelDiablo
12.06.2013 - 13:57
ИМХО: грузить все города в JSON и сортировку по букве проводить силами JS на стороне клиента.
_____________
Блог |
VK |
GitHub |
Twitch
inpost
12.06.2013 - 14:26
У меня была идея кешировать всё.
А.cache
АБ.cache
АБА.cache
в таком духе, получилось бы около несколько десятков тысяч файлов в конце, зато JS не лез бы в базу, а подгружал нужный файл непосредственно с файловой системы из файла, ну а там в каком-нибудь серилизованном формате хранить.
_____________--
Хотя с другой стороны Аякс не такая уж и страшная вещь, если не слишком много и часто приходится выбирать город.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Guest
не то на уровне клиента это не сделать мне нужна защита от вредителя который заменит родную функцию и подделает запрос
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Не Кэш мне не подойдет
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
T1grOK
12.06.2013 - 15:13
Цитата (ABC @ 12.06.2013 - 10:38) |
Guest не то на уровне клиента это не сделать мне нужна защита от вредителя который заменит родную функцию и подделает запрос |
Это фантастика
Не видел пока ни одного ресурса, который бы устоял против грамотного использования CURL. Тот же VK ограничивает количество запросов в секунду, но это обходится использованием прокси серверов.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Игорь_Vasinsky
12.06.2013 - 15:18
а чем клиентская сторона говоришь не устраивает?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
T1grOK
Я планировал, может как-то через сессии установить таймер +счетчик для таких запросов внутри xmlhttprequest...
Типа максимум 3 запроса, 300 секунд не пускаем если есть запрос, по истечении обновляем счетчик до 0 и по кругу.
Игорь_Vasinsky
Цитата |
а чем клиентская сторона говоришь не устраивает? |
можно подделать и js-функцию и тащить запросы...
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Появилась идейка вот такая:
Поставить внутри обработчика:
if(isset($_SESSION['AJAX']))
{
if($_SESSION['AJAX']>3)sleep($_SESSION['AJAX']);
$_SESSION['AJAX']++;
}
else $_SESSION['AJAX']=1;
Т.е. начиная с 4 раза...будет ждать паузы в 4...N секунд. Но не знаю, как сервер к этому отнесется.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
inpost
12.06.2013 - 15:49
Это же sleep будет этот запрос, а параллельно ты пошлёшь несколько других запросов.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
glock18
12.06.2013 - 15:52
Цитата (ABC @ 12.06.2013 - 11:47) |
Т.е. начиная с 4 раза...будет ждать паузы в 4...N секунд. Но не знаю, как сервер к этому отнесется. |
запросы не будут отпинываться, а будут только плодиться и плодиться. Результат можно предсказать еще худший, чем если ничего не делать, при спаме.
inpost
Ну они же привязаны будут к $_SESSION['AJAX']...к сессии юзера
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
понятно...я подозревал, что не открыл Америку внезапно
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
glock18
12.06.2013 - 16:05
Цитата (ABC @ 12.06.2013 - 11:53) |
Ну они же привязаны будут к $_SESSION['AJAX']...к сессии юзера |
Это кстати тоже проблема. В обычных условиях бот должен сохранять куки между запросами, чтобы сессию имитировать, но в данном случае достаточно будет забить, прошу прощения, болт на сессии, и каждый запрос будет иницировать новую сессию, из-за чего защита эта ничего не сделает на деле.
Но опять же, защита должна спам запросов от ботов отпинывать (обрывать обработку сразу же, как только становится известно что это дос), а не подвешивать их. Скажем, у вас ограничение кол-во одновременных запросов = 400. Нужно всего-навсего, сохраняя куки, отправлять вам запросы для 400 различных сессий. После 5-7 запросов для каждой сессии, они надежно займут все доступные соединения
PS: ну, кстати еще одна проблема - если сессионную переменную будете одну использовать для всех аяксовых обработчиков, то легко может в итоге получиться, что на одной странице есть 3+ аякс-запросов на сервер (подгрузка каких-то списков и тд), что отрицательным образом скажется на user experience.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.