# Предотвращайте ваше однопоточное выполнение от перегрузки злонамеренным 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 для проверки того, что входные данные, полученные от пользователя, соответствуют ожидаемым условиям. Уязвимое регулярное выражение известно как выражение, которое применяет повторение к повторяющейся группе захвата, и где строка для сопоставления состоит из суффикса действительного сопоставленного шаблона и символов, которые не соответствуют группе захвата.