Необмежене споживання ресурсів
Один запит, чверть мільйона записів і жодного обмеження.
Що таке Необмежене споживання ресурсів?
Деякі ендпоінти не обмежують, скільки роботи може вимагати один запит. Ендпоінт списку бере розмір сторінки прямо із запиту й передає його в базу даних без максимуму на сервері, тож той, хто викликає, може попросити всю таблицю. Ви запишете параметр limit, яким керує той, хто викликає, відтворите запит із проханням про все й побачите, як одна відповідь викачує весь каталог і водночас навантажує базу даних до межі. Виправлення обмежує розмір сторінки максимумом на сервері. Повторний пробний запит повертає 200 OK з обмеженим обсягом даних.
Що ви дізнаєтесь у Необмежене споживання ресурсів
- Розпізнавайте необмежене споживання ресурсів там, де ендпоінт не обмежує, скільки може спожити один запит, тож один виклик може змусити сервер виконати необмежений обсяг роботи
- Усвідомлюйте: якщо розмір сторінки (або кількість, розмір чи глибину) задає той, хто викликає, а максимуму на сервері немає, один запит може повернути весь набір даних одразу
- Усвідомлюйте, що розмір сторінки без обмеження — це і вектор масового викачування даних, і спосіб викликати відмову в обслуговуванні, бо один завеликий запит вичерпує пам'ять і займає з'єднання з базою даних
- Відрізняйте цю ваду від вад доступу на рівні об'єктів, надмірної серіалізації полів і прогалин автентифікації: тут автентифікація працює правильно, а бракує заходу захисту — обмеження ресурсів на один запит
- Застосовуйте виправлення: обмежуйте запитаний розмір сторінки максимумом на сервері, тримайте це обмеження на сервері, розбивайте великі набори результатів курсорною пагінацією й додавайте обмеження частоти запитів для кожного, хто викликає, в межах часового вікна
Необмежене споживання ресурсів — Кроки навчання
-
Публічна стрічка перегляду
Vendlo — застосунок-маркетплейс для вживаних речей: учасники виставляють речі на продаж, а переглядати каталог може кожен. Цього разу Боб націлився на Vendlo. Йому потрібні дві речі: увесь актуальний каталог із цінами, щоб перепродати конкурентові, і дешевий спосіб вивести API з ладу, якщо вирішить це зробити. Він зареєструвався як звичайний учасник і відкриває публічну стрічку перегляду, щоб побачити, як вона завантажується.
-
Стежте за запитом
Сітку, яку розглядає Боб, застосунок побудував із даних, отриманих через API. На ній 24 оголошення і примітка, що за ними ховається значно більше. Боб відкриває мережеві інструменти браузера й один раз перезавантажує сторінку, щоб записати виклик, який застосунок надсилає для побудови стрічки.
-
Розмір сторінки задає той, хто викликає
Перезавантаження записано, і запит уже на панелі Network («Мережа»). Боб читає, як застосунок попросив свою сторінку оголошень.
-
Чверть мільйона за цією сторінкою
Боб відкриває відповідь, яку повернув ендпоінт, і читає, що в ній сказано про розмір каталогу.
-
Попросіть усе
Боб відтворює той самий виклик у «Тестері API» й змінює одне: замість сторінки з 24 оголошень просить 250 000 оголошень в одному запиті. Якщо сервер це виконає, один виклик віддасть йому весь каталог.
-
Один запит — і весь каталог
Сервер зробив саме те, про що його попросили. Відповідь показує, чого це коштувало.
-
Вітрина не витримує
Дев'ять секунд — надто довго утримувати з'єднання з базою даних. Боб надсилає той самий запит ще раз, одразу кількома копіями, і кожна з них пропускає через себе чверть мільйона рядків, а з'єднання весь цей час лишається зайнятим. Пул з'єднань Vendlo невеликий, тож поки ці запити займають з'єднання, публічна вітрина не може отримати жодного для себе. Поки запити виконуються, Боб перезавантажує сторінку Vendlo, щоб побачити, що зараз бачить справжній покупець.
-
Справжні покупці без доступу
Той самий ендпоінт, який щойно віддав Бобові весь каталог, тепер не може обслужити звичайного покупця. У «Тестері API» Боб і далі бачить свою відповідь 200 із повним каталогом, а вітрина поруч показує те, що отримують усі інші.
-
Перевірка знань
-
Надходить сповіщення
Ви відповідаєте за API каталогу Vendlo. Уночі моніторинг виявив обліковий запис одного учасника: кожен його запит повертав увесь каталог і дев'ять секунд утримував з'єднання з базою даних, а поки ці запити виконувалися, затримка API різко зростала на всіх ендпоінтах. Вам надіслав електронного листа центр моніторингу безпеки.
Охоплення стандартів безпеки
OWASP API Top 10
- API4:2023 Unrestricted Resource Consumption
CWE
- CWE-770 Allocation of Resources Without Limits or Throttling
- CWE-400 Uncontrolled Resource Consumption
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security