Desenvolvimento

22 ago, 2014

10 boas práticas para tornar seus aplicativos mais seguros – Parte 04

Publicidade

Este é o quarto artigo de uma série sobre as Top 10 práticas proativas da OWASP: 10 coisas que os desenvolvedores podem fazer para se certificar de que seu aplicativo é seguro. Veja o anterior aqui.

Controle de acesso, também conhecido como autorização, decide quem precisa de qual acesso a quais dados e quais recursos, e como essas regras serão reforçadas deve ser cuidadosamente pensado antecipadamente no design. É difícil aperfeiçoar o controle de acesso sem cometer erros depois. Proponha um padrão precoce e certifique-se de que seja aplicado de forma consistente. E certifique-se de seguir estas regras simples:

Negue por padrão

Em muitos aplicativos, o comportamento padrão é permitir o acesso aos recursos e aos dados ou outras características, a não ser que seja adicionada uma verificação de controle de acesso e esta falhar. Pare e pense por uns segundos no que poderia dar errado com essa abordagem. Se não for óbvio, vá para o número 7 na lista da OWASP com as Top 10 vulnerabilidades mais graves dos aplicativos: Top 10 funções de controle de acesso. Em seguida, certifique-se de só permitir o acesso a uma função caso uma verificação de autorização passe.

Qual é a sua política de controle de acesso?

Verificações de acesso – até mesmo as verificações que são feitas corretamente, usando uma abordagem de acesso positivo, muitas vezes são espalhadas por todo o código do aplicativo, parecendo-se com algo mais ou menos assim:

if (user.isManager() || user.isAdministrator() || user.isEditor() || user.isUser()) { //execute action }

O problema com essa abordagem é que é muito difícil rever as suas regras de controle de acesso e garantir que elas estejam corretas, e é difícil fazer mudanças, porque você não há como ter certeza de que encontrou todas as verificações e que as alterou corretamente.

Em vez de incorporar as regras de controle de acesso baseado no ID do usuário ou na função dentro da lógica do aplicativo, centralize as regras de controle de acesso em um serviço de autorização baseado em dados que mapeiam os usuários contra as funções ou outros regimes de autorização, e forneça uma API simples para esse serviço que o código do aplicativo pode chamar. Muito mais fácil de auditar, muito mais extensível e de fácil manutenção.

Se isso não estiver disponível no framework do aplicativo que você estiver usando, procure uma boa biblioteca de segurança para fazer o serviço. O Apache Shiro oferece um framework de controle de acesso fácil e flexível que pode ser usado para implementar essas ideias. O ESAPI do OWASP também tem um framework para reforçar as regras de controle de acesso refinado em função, serviço, URL, dados e níveis de arquivo.

Não confie – verifique

De volta à questão dos dados de confiança. Nunca use os dados do lado do cliente ou outros não confiáveis em decisões de controle de acesso. Só use os do lado do servidor de confiança.

Para saber mais sobre os padrões de controle de acesso, antipadrões e problemas comuns na implementação correta de controles de acesso, por favor leia Access Control Cheat Sheet do OWASP.

O controle de acesso está intimamente ligado à autenticação – na verdade, algumas pessoas confundem essas ideias. Então, na próxima vez, vamos dar uma olhada nas questões-chave da implementação de autenticação.

***

Artigo traduzido pela Redação iMasters com autorização do autor. Publicado originalmente em http://swreflections.blogspot.com.br/2014/06/10-things-you-can-do-to-make-your-app_16.html