← Все комнаты Путь «Защита (код)» →
СреднийЗащита (код) Код Осенний CTF

Скользящее окно

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Ограничивать частоту запросов скользящим окном.

Напишите rate_limit(timestamps, limit, window). Для каждого запроса (времена по возрастанию) верните, пропущен ли он: запрос в момент t пропускается, если среди пропущенных раньше запросов во времени (t − window, t] их меньше limit.

Задание 2Теория и инструменты

Rate limiting защищает от перебора и перегрузки. Скользящее окно считает запросы за последние window секунд.

Отклонённые запросы не должны занимать место в окне, иначе клиент не восстановится.

Инструменты

  • Python 3 или Node.js
  • Встроенные тесты в редакторе

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
rate_limit([1, 2, 3, 4, 5], 2, 3)
→ [true, true, false, true, true]
Пример 2
rate_limit([0, 0, 0, 10], 2, 5)
→ [true, true, false, true]

Ещё 3 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Храните времена пропущенных запросов.

Подсказки — каждая до решения стоит −25 очков

Задание 4Как защититься

Ставьте ограничения на вход, сброс пароля и дорогие API. Отвечайте кодом 429.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.