Как стать автором
Обновить

Комментарии 14

Статический сайт и безызвестность — лучшая защита от DDOS.
(половина шутки юмора)
Известность — лучше защита чем безызвестность — детские атаки не отличишь от случайного всплеска активности пользователей, а взрослые ну очень дорогие.
Меня пока только «школьники» докучали. Судя по логам, брутфорсили вордпресс… А у меня сайт не на вордпрессе.) Не знаю, считается ли это DDoS'ом, но php работать из-за нагрузки перестал, но статические страницы грузились без проблем. А вот от «взрослых» на моём тарифе сайт задохнётся.(
Мне кэширование не помогло бы в любом случае. Единственная php страница считает загрузки, так что её кэшировать нельзя. А остальное итак плоский html.
А что мешает хранить все ID в дешевом «кэше», отдавать 404, если его там нет, и обращаться к серверу приложений, если ID есть, но данных в кэше нет?
то, что злоумышленник воспользуется этим: он будет обращаться к заведомо несуществующим ресурсам, что приведет к постоянному обращению к серверу (а это как минимум запрос на поиск ресурса, а может быть и еще какая-то логика)
Как я понимаю, это «дешевые» запросы.
Даже дешевле, чем запросы к кэшу для существующих ресурсов.
Поправьте меня, если я ошибаюсь:

Смысл «подписывания» ID в том, чтобы злоумышленники не смогли нагенерировать миллиард разных реальных запросов, и положить проект, если бы все ответы на эти запросы не были в кэше.

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

Полагаю, тут больше проблема в нагрузке на заполнение кэша.

А что мешает вытащить все урлы сайта и начать по ним активно "ходить"? То есть перебирать все корректные урлы. В этом случае данная проверка только увеличит нагрузку ведь.

Согласен, хороший DDoS тот, который легко спутать с поведением рядового пользователя
Если API к непубличному ресурсу, то достаточно реализовать быструю авторизацию.

Если к публичному — то либо идентификаторы генерируются пользователем, но тогда у атакующего, как и у легального пользователя, должна быть возможность делать корректную подпись к интересующим его идентификаторам.

Либо эти идентификаторы недоступны к генерации пользователем (т.е. они системные), но тогда их достаточно шифровать шифром с коротким блоком, например, для 32-х битных идентификаторов шифрование 56-битным DES увеличит представление идентификатора меньше чем в два раза, а вероятность попадания в нужный диапазон (после расшифровки) будет меньшей 2**(56-32)=2**24, т.е. меньше одной шестнадцатимиллионной.
Лично делал хранение в кэше только реально существующих страниц (на основе карты сайта и ряда страниц исключений, которые не должны присутствовать в карте сайта).
Но проблема всё равно оставалась, т.к. на сайте все данные передаются по API и его я кэшировать не могу. API завязан на данные пользователя и ответ в некоторых случаев разный для разных пользователей. Вот что с API делать — загадка.

Сделать ключом кэша не только адрес ресурса, но и идентификатор пользователя?

А потом пытаться на кончиках пальцев контролировать все изменения данных, текущих условий и т.д.?

Когда много динамики в выдаче (эти блоки мы ему уже показывали, сегодня покажем эти), это контролирвоать очень трудно. Отсюда и кэш плодится, как незнамо кто…

Пока доверяю простым запросам к БД, которые должны сами по себе кэшироваться и простой шаблонизации/сериализации, но только для AJAX запросов. Основные страницы всё же из кэша.

А так да, можно сделать составные ключи, но я вот чувствую, что работать с ними слишком больно…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий