﻿# V5327\. OWASP\. Possible regex injection\. Potentially tainted data is used to create regular expression

Анализатор обнаружил, что пришедшие извне данные используются в качестве регулярного выражения и не подвергаются проверке\. Это делает приложение уязвимым к отказу в обслуживании \(DoS\)\.

Уязвимости такого типа относятся к категории рисков OWASP Top 10 Application Security Risks 2021: 

* [A3:2021 \- Injection\.](https://owasp.org/Top10/A03_2021-Injection/)

Если код выглядит таким образом:

```cpp
@GetMapping("/check")
public String checkInput(@RequestParam("input") String input) {
    var match = vulnerableString.matches(input); // <=
    if (match) {
        return "Valid input";
    } else {
        return "Invalid input";
    }
}
```

То злоумышленник сможет сделать неэффективное регулярное выражение, замедляющее работу приложения\. В худшем случае, если атакующий сможет подобрать Evil Regex — регулярное выражение, из\-за которого выполнение зависнет, — это приведёт к отказу в обслуживании\. Такая атака называется [ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)\.

Чтобы защититься от таких атак, лучше всего экранировать ввод с помощью `Pattern.quote`:

```cpp
@GetMapping("/check")
public String checkInput(@RequestParam("input") String input) {
    var regex = Pattern.quote(input);
    var match = vulnerableString.matches(input);
    if (match) {
        return "Valid input";
    } else {
        return "Invalid input";
    }
}
```