# Предотвращайте ваше однопоточное выполнение от перегрузки злонамеренным RegEx ### Объяснение в один абзац Риск, связанный с использованием регулярных выражений, - это вычислительные ресурсы, которые требуют анализа текста и сопоставления с заданным шаблоном. Для платформы Node.js, где доминирует однопотоковый цикл обработки событий, связанная с процессором операция, такая как разрешение шаблона регулярного выражения, сделает приложение не отвечающим на запросы. Избегайте RegEx, когда это возможно, или отложите задачу до выделенной библиотеки, например [validator.js](https://github.com/chriso/validator.js) или [safe-regex](https://github.com/substack/safe-regex), чтобы проверить, безопасен ли шаблон RegEx. Некоторые [примеры OWASP](https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS) уязвимых шаблонов RegEx: * (a|aa)+ * ([a-zA-Z]+)*

### Пример кода - Включение SSL/TLS с использованием платформы Express ```javascript const saferegex = require('safe-regex'); const emailRegex = /^([a-zA-Z0-9])(([\-.]|[_]+)?([a-zA-Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}[a-z]{2,3}))$/; // should output false because the emailRegex is vulnerable to redos attacks console.log(saferegex(emailRegex)); // instead of the regex pattern, use validator: const validator = require('validator'); console.log(validator.isEmail('liran.tal@gmail.com')); ```

### Цитата из книги: "Уязвимое регулярное выражение известно как выражение, которое применяет повторение" Из книги [Essential Node.js Security](https://leanpub.com/nodejssecurity) > Часто программисты используют RegEx для проверки того, что входные данные, полученные от пользователя, соответствуют ожидаемым условиям. Уязвимое регулярное выражение известно как выражение, которое применяет повторение к повторяющейся группе захвата, и где строка для сопоставления состоит из суффикса действительного сопоставленного шаблона и символов, которые не соответствуют группе захвата.