Проблема уязвимости SonarQube Regex в JavaScript - PullRequest
0 голосов
/ 28 февраля 2020

Где бы я ни использовал Regex в JavaScript коде, SonarQube показывает проблему уязвимости. Есть ли альтернатива для регулярных выражений в JavaScript?

Ошибка: Make sure that using a regular expression is safe here.

Пример регулярного выражения: '(^(?=[A-Za-z0-9\._-]*$)(?=.*[A-Za-z0-9]).*$)'

1 Ответ

1 голос
/ 03 марта 2020

Это на самом деле не проблема, а предупреждение системы безопасности.

Проверяли ли вы описание ошибки в SonarQube?

Оценка регулярных выражений по отношению к входным строкам потенциально чрезвычайно сложна. Процессорная нагрузка. Специально созданные регулярные выражения, такие как (a +) + s, потребуют несколько секунд для оценки входной строки , Однако эквивалентное регулярное выражение a + s (без группировки) эффективно оценивается в миллисекундах и масштабируется линейно в зависимости от размера ввода.

Оценка таких регулярных выражений открывает путь к атакам типа «Отказ в обслуживании» (ReDoS) для регулярных выражений , В контексте веб-приложения злоумышленники могут заставить веб-сервер тратить все свои ресурсы на оценку регулярных выражений, что делает службу недоступной для подлинных пользователей.

Это правило помечает любое выполнение жестко закодированного регулярного выражения, которое имеет не менее 3 символов и не менее двух экземпляров любого из следующих символов: * + {.

Пример: (a +) *

Задайте себе вопрос • Чувствительно ли выполненное регулярное выражение и Пользователь может предоставить строку, которая будет проанализирована этим регулярным выражением. • снижение производительности вашего механизма регулярных выражений с помощью специально созданных входных данных и регулярных выражений.

Вы можете быть в опасности, если ответите «да» на любой из этих вопросов.

Чтобы решить эту проблему, вам необходимо проверить, не рискует ли RegEx. Если нет, вы можете просто отметить его как ложное срабатывание, в противном случае проверка регулярного выражения может быть обязательной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...