Выбор ответа Senior Безопасность бэкенда обновлено
ReDoS
Вопрос
Почему регулярка /^(a+)+$/ опасна для Node-сервера, проверяющего пользовательский ввод?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Перебор вариантов растёт экспоненциально и блокирует loop. Вложенные квантификаторы дают множество способов разбить строку.
Варианты ответа
- Она не поддерживается V8 и бросит SyntaxError
- Она съедает всю память под захватывающие группы
- Перебор вариантов растёт экспоненциально и блокирует loopправильный ответ
- Она опасна только с флагом
gиlastIndex
Разбор
Вложенные квантификаторы дают множество способов разбить строку. Когда в конце совпадения нет, движок с возвратами пробует их все, время растёт экспоненциально. Пока регулярка считает, однопоточный сервер не отвечает никому. Защита: простые регулярки без вложенных квантификаторов, лимит длины ввода, линтеры на опасные шаблоны.
- V8 такую регулярку поддерживает.
- Проблема во времени, а не в памяти.
- Флаг
gтут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Безопасность бэкенда»
- Безопасный INSERT: параметры и белый список колонок
- CORS: проверка Origin по белому списку
- Проверка claims JWT после подписи
- deepMerge без prototype pollution
- Rate limiter на token bucket
- Кто превысил лимит запросов: скользящее окно
- Код-ревью: регистрация, вход и сброс пароля
- Как защитить Node.js API