Я использую весеннюю загрузку 2 с конфигурацией безопасности Okta Starter.My, как показано ниже.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().oauth2ResourceServer().jwt();
// Send a 401 message to the browser (w/o this, you'll see a blank page)
Okta.configureResourceServer401ResponseBody(http);
}
Все работает нормально, как ожидалось, но сонар дает следующую точку безопасности на authorizeRequest (), как показано ниже
"Убедитесь, что здесь разрешено безопасное управление разрешениями
Управление разрешениями зависит от безопасности. В прошлом это приводило к следующим уязвимостям:
CVE-2018-12999 CVE-2018- 10285 CVE-2017-7455 Злоумышленники могут повредить только то, к чему у них есть доступ. Таким образом, ограничение их доступа - хороший способ предотвратить их нарушение. c, но это должно быть сделано правильно.
Это правило Флаги кода, который контролирует доступ к ресурсам и действиям. Цель состоит в том, чтобы направлять обзоры кода безопасности.
Более конкретно, это вызовет проблемы со следующим кодом Spring:
Определение реализации любого класса интерфейсы org.springframework.security.access.AccessDecisionVoter
org.springframework.security.access.AccessDecisionMana ger
org.springframework.security.access.AfterInvocationProvider
org.springframework.security.access.PermissionEvaluator
org.springframework.security.access.expression 10Osecurity *
org.springframework.security.access.expression.method.MethodSecurityExpressionHandler
org.springframework.security.core.GrantedAuthority
org.springframework.secran.Purity 1030 *
Определение любого расширяющего класса класса org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration
Любой метод, аннотированный до-пост-аннотациями: @PreAuthorize, @PreFilter, @Post или @PostFilter из пакета org.springframework.security.access.prepost.
@org.springframework.security.access.annotation.Secured
Вызывает любой из следующих методов org.springframework. security.acls.model.MutableAclService: createAcl, deleteA cl, updateAcl
org.springframework.security.config.annotation.web.builders.HttpSecurity: authorizeRequests
Создание экземпляра анонимного класса, реализующего org.springframework.security.core.GrantedAuthority или любой класс, реализующий этот интерфейс напрямую. Это также поднимает проблему с аннотациями JSR-250 @RolesAllowed, @PermitAll и @DenyAll из пакета javax.annotation.security.
Спросите себя, является ли хотя бы одно доступное действие или ресурс чувствительным к безопасности. отсутствует контроль доступа или он не охватывает все важные действия и ресурсы. у пользователей есть разрешения, которые им не нужны. управление доступом основано на вводе пользователем или некоторых других небезопасных данных. разрешения трудно удалить или они требуют много времени для обновления. Вы рискуете, если ответили утвердительно на первый вопрос и любой из следующих.
Рекомендуемые методы безопасного кодирования Первый шаг - ограничить все важные действия для аутентифицированных пользователей.
Каждый пользователь должны иметь минимально возможные привилегии. Детализация контроля доступа должна соответствовать чувствительности каждого ресурса или действия. Чем он более чувствителен, тем меньше людей должно иметь к нему доступ.
Не основывайте управление доступом на пользовательском вводе или значении, которое могло быть подделано. Например, разработчик не должен читать разрешения пользователя из HTTP cook ie, так как он может быть изменен на стороне клиента.
Убедитесь, что доступ к каждому действию и ресурсу правильно ограничен.
Позволяет администраторам быстро удалять разрешения при необходимости. Это позволяет им сократить время, в течение которого злоумышленник может получить доступ к вашим системам в случае нарушения.
Регистрировать и отслеживать отклоненные запросы на доступ, поскольку они могут выявить атаку.
См. OW ASP Top 10 2017, категория A5 - контроль доступа Boken SANS Top 25 - пористая защита "
В качестве исправления я сделал несколько вещей, но проблема все еще есть.
Исправлено:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/**").access("hasAnyAuthority('CLIENT', 'ADMIN','OPERATION')").anyRequest()
.authenticated().and().oauth2ResourceServer().jwt();
// Send a 401 message to the browser (w/o this, you'll see a blank page)
Okta.configureResourceServer401ResponseBody(http);
}
Может кто-нибудь помочь с этим?