﻿# V5328\. OWASP\. Using non\-restrictive authorization checks could lead to security violations\.

Анализатор обнаружил потенциальную ошибку, связанную со слабой проверкой авторизации пользователя\. Предоставление неограниченного доступа всем пользователям может привести к уязвимостям безопасности и потенциальному нецелевому использованию критических функций программы\.

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

* [A1:2021 \- Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)

Предполагается, что при проверке авторизации метод, принимающий решение, может отказать в авторизации в случае, если пользователь не имеет необходимых привилегий\. Если же реализация не предусматривает отказа в авторизации, такой метод считается небезопасным, а проверка — ненадежной\.

Например, реализация метода `vote` из класса [`AccessDecisionVoter`](https://docs.spring.io/spring-security/site/docs/4.2.x/apidocs/org/springframework/security/access/AccessDecisionVoter.html) возвращает всегда положительный ответ, даже в случае, если пользователь не имеет нужных привилегий:

```cpp
@Override
public int vote(Authentication authentication, 
                FilterInvocation filterInvocation, 
                Collection<ConfigAttribute> attributes
  ) {
  boolean isAdmin = hasAdminRole(authentication);
  String requestMethod = filterInvocation.getRequest().getMethod();
  if ("DELETE".equals(requestMethod) && !isAdmin) {
    return ACCESS_GRANTED;
  }
  return ACCESS_GRANTED;
}
```

Реализация считается безопасной, если она возвращает хотя бы одно отрицательное решение:

```cpp
@Override
public int vote(Authentication authentication, 
                FilterInvocation filterInvocation, 
                Collection<ConfigAttribute> attributes
  ) {
  boolean isAdmin = hasAdminRole(authentication);
  String requestMethod = filterInvocation.getRequest().getMethod();
  if ("DELETE".equals(requestMethod) && !isAdmin) {
    return ACCESS_DENIED;
  }
  return ACCESS_GRANTED;
}
```