Files
2019-11-29 08:47:45 +03:00

35 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Предотвращайте ваше однопоточное выполнение от перегрузки злонамеренным 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]+)*
<br/><br/>
### Пример кода - Включение 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'));
```
<br/><br/>
### Цитата из книги: "Уязвимое регулярное выражение известно как выражение, которое применяет повторение"
Из книги [Essential Node.js Security](https://leanpub.com/nodejssecurity)
> Часто программисты используют RegEx для проверки того, что входные данные, полученные от пользователя, соответствуют ожидаемым условиям. Уязвимое регулярное выражение известно как выражение, которое применяет повторение к повторяющейся группе захвата, и где строка для сопоставления состоит из суффикса действительного сопоставленного шаблона и символов, которые не соответствуют группе захвата.