﻿# V5323\. OWASP\. Potentially tainted data is used to define 'Access\-Control\-Allow\-Origin' header\.

Анализатор обнаружил небезопасную конфигурацию Cross\-origin resource sharing \(CORS\)\. Значение заголовка ответа сервера Access\-Control\-Allow\-Origin формируется на основе непроверенных данных извне\.

Если значение заголовка `Access-Control-Allow-Origin` конфигурируется на основе данных извне, которые никак не проверяются, то это небезопасно и, в зависимости от обстоятельств, чревато негативными последствиями разной степени серьёзности\. Сайты злоумышленников смогут получать доступ к ресурсам вашей страницы, а при особых обстоятельствах возможно раскрытие конфиденциальной информации\.

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

* [A5:2021\-Security Misconfiguration\.](https://owasp.org/Top10/A05_2021-Security_Misconfiguration/)

 Пример небезопасной конфигурации:

```cpp
@GetMapping("/test")
public ResponseEntity<?> getExample(@RequestParam("origin") String origin) {
  var httpHeaders = new HttpHeaders();
  httpHeaders.add("Access-Control-Allow-Origin", origin); // <=

  return new ResponseEntity<>("ok", httpHeaders, HttpStatus.ACCEPTED);
}
```

Чтобы исключить риски, необходимо проверять, соответствуют ли данные извне значениям из "белого листа"\.

Исправленный пример:

```cpp
private static final List<String> ALLOWED_ORIGINS = List.of(
        "https://first-allowed-domain.com",
        "https://second-allowed-domain.com"
);

@GetMapping("/test")
public ResponseEntity<?> getExample(@RequestParam("origin") String origin) {
  var httpHeaders = new HttpHeaders();
  if (ALLOWED_ORIGINS.contains(origin)) {
      httpHeaders.add("Access-Control-Allow-Origin", origin);
  }
  // ....
}
```