Ключевые факты
- Категория
- Безопасность и валидация
- Типы входных данных
- textarea, text, number
- Тип результата
- json
- Покрытие примерами
- 4
- API доступен
- Yes
Обзор
Сканер ReDoS — это специализированный инструмент для проверки регулярных выражений на уязвимость к катастрофическому возврату (catastrophic backtracking). Он сочетает статический анализ с симуляцией вредоносного ввода (near-miss), позволяя разработчикам и специалистам по безопасности оценивать риски отказа в обслуживании (ReDoS), измерять время выполнения при стресс-тестировании и получать рекомендации по безопасному переписыванию паттернов.
Когда использовать
- •Перед развертыванием новых регулярных выражений для валидации данных в production-окружении.
- •При аудите безопасности существующей кодовой базы на наличие скрытых уязвимостей ReDoS.
- •Во время ревью кода для проверки сложных паттернов с вложенными квантификаторами.
Как это работает
- •Вставьте одно или несколько регулярных выражений (по одному на строку) в основное текстовое поле без обрамляющих слешей.
- •При необходимости укажите флаги (например, i или m), максимальную длину генерируемого вредоносного ввода и количество прогонов симуляции.
- •Инструмент проведет статический анализ структуры паттерна и сгенерирует строки, которые почти совпадают с выражением, для стресс-тестирования.
- •Получите подробный JSON-отчет с оценкой уровня риска, худшим временем выполнения и вариантами безопасной замены уязвимых выражений.
Сценарии использования
Примеры
1. Проверка валидатора логина
Backend-разработчик- Контекст
- Разработчик написал регулярное выражение для проверки сложных логинов, но подозревает, что оно может быть уязвимо к атакам.
- Проблема
- Убедиться, что паттерн не вызовет зависание сервера при передаче длинной некорректной строки.
- Как использовать
- Вставить паттерн в поле списка regex, установить длину злого ввода на 32 и запустить проверку.
- Пример конфигурации
-
{ "regexList": "^(\\w+\\s?)*$", "maxEvilInputLength": 32, "simulationRuns": 200 } - Результат
- Сканер выявляет критический риск из-за вложенных квантификаторов и предлагает заменить паттерн на более строгий без пересекающихся групп.
2. Массовый аудит регулярных выражений
Специалист по информационной безопасности- Контекст
- Команда ИБ проводит аудит старого проекта и собрала список из десятков регулярных выражений, используемых в маршрутизации и валидации.
- Проблема
- Быстро отфильтровать безопасные паттерны от тех, которые подвержены ReDoS-атакам.
- Как использовать
- Скопировать весь список регулярных выражений (по одному на строку) в сканер и увеличить количество прогонов до 500 для повышения точности бенчмарка.
- Пример конфигурации
-
{ "regexList": "(a+)+$\n^[0-9]+$\n<([a-z]+)([^<]+)*(?:>(.*)<\\/\\1>|\\s+\\/>)", "simulationRuns": 500 } - Результат
- Инструмент выдает JSON-отчет, где каждому паттерну присвоен уровень риска, что позволяет сфокусироваться на исправлении только уязвимых выражений.
Проверить на примерах
regexFAQ
Что такое катастрофический возврат (catastrophic backtracking)?
Это ситуация, когда регулярное выражение с вложенными или пересекающимися квантификаторами тратит экспоненциальное время на проверку несовпадающей строки, что может привести к зависанию сервера.
Как инструмент генерирует вредоносный ввод?
Сканер анализирует структуру регулярного выражения и создает строки (near-miss), которые заставляют движок regex перебирать максимальное количество вариантов перед тем, как выдать ошибку совпадения.
Зачем настраивать количество прогонов симуляции?
Увеличение числа прогонов (до 5000) позволяет получить более точные данные о времени выполнения при стресс-тестировании, сглаживая случайные колебания производительности.
Какие флаги поддерживаются?
Поддерживаются стандартные флаги регулярных выражений JavaScript, такие как i (регистронезависимость), m (многострочность) или u (поддержка Unicode).
Предлагает ли сканер исправления для уязвимых паттернов?
Да, в результатах анализа для паттернов с высоким уровнем риска предоставляются рекомендации и примеры более безопасного написания.