Autorização
Decidir quem tem o direito de fazer o quê, sem deixar nenhuma porta entreaberta.
Autorização e controle de acesso
A autenticação é um problema resolvido: existe uma resposta correta, e o Spring Security a fornece. A autorização, por sua vez, é um problema de design, e é aí que se escondem as falhas mais interessantes. Um atacante não precisa quebrar o seu hash BCrypt se puder consultar a fatura de outro cliente apenas trocando um identificador na URL. A OWASP coloca esse tipo de falha — o controle de acesso quebrado — no topo do seu ranking de riscos.
Essas falhas têm uma característica em comum: elas não provocam nenhum erro. Uma regra de autorização ampla demais não quebra; ela autoriza. Uma regra posicionada atrás de outra que a absorve não avisa nada; ela simplesmente é ignorada. Uma anotação @PreAuthorize em um método chamado a partir da mesma classe não é aplicada; a chamada é bem-sucedida. Nos três casos, os testes funcionais passam, a demonstração corre bem, e o acesso está aberto.
Esta lição trata a autorização em dois níveis. No nível das URLs, com authorizeHttpRequests, que protege a entrada do prédio. No nível dos métodos, com @PreAuthorize, que protege cada cômodo — e que é o único capaz de responder à pergunta « esta fatura pertence mesmo a quem está chamando? », pergunta que uma regra de URL é estruturalmente incapaz de decidir.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão