API’s são feitas para serem consumidas, e por conta disso muitas vezes elas acabam sendo uma porta de entrada para ataques ou acessos não autorizados, por conta disso hoje vou listar as Melhores práticas na segurança de API.
Sempre use HTTPS
Isso fará com que a comunicação entre o cliente e o servidor seja criptografada.
Além disso isso significa que nenhum dado será injetado depois que da requisição ser disparada pelo cliente.
Além disso irá garantir que todas as chaves de acesso armazenadas na requisição estão seguras.
Autenticação
Autenticação é a forma mais simples de evitar acesso indevido a uma API, por permitir ou negar o acesso a um determinado usuário.
Até mesmo em API’s públicas eu aconselho que seja implementada a autenticação pois dessa forma você tem o controle sob os acessos a sua API e pode facilmente remover acessos de usuário que estejam abusando do serviço.
Autorização
Autorização é o complemento da autenticação.
Enquanto a autenticação foca se o usuário pode ou não acessar a API a autorização foca em quais partes da API esse usuário pode acessar.
Isso pode ser feito de várias maneiras, seja utilizando perfis de acesso, claims de acesso.
Limite de requisições
Limitar a quantidade de requisições feitas em um período de tempo por um usuário.
Isso vai lhe ajudar a evitar custos desnecessários com servidor e evitar que seu servidor seja sobrecarregado de requisições.
Validação e limpeza de inputs
Uma das formas mais antigas de ataque é via input de uma aplicação, geralmente se usa validação no frontend.
Porém essa validação e limpeza dos dados deve ser feita também na sua API.
A limpeza deve tirar todo tipo de código malicioso ou inválido.
Exponha somente o necessário
Pode parecer tentador retornar o modelo completo de dados em um endpoint de uma api.
Mas isso pode trazer alguns problemas, como por exemplo.
Aumentar o tráfego de dados.
Tornar o retorno maior e mais complexo de se entender.
Pode dar acesso a dados que os usuário não precisam.
E até mesmo em alguns casos dados que eles não deveriam conseguir acessar como, login e senha em um endpoint de usuários por exemplo.
Configure mensagens de erro
Da mesma forma que é preciso limpar os dados que entram em sua API.
Também é importante tomar cuidado com os dados que saem de sua API.
Especialmente as mensagens de erro tem um papel importante na segurança da sua API.
Já que elas podem levar muitas vezes logs ou stack traces com dados sensíveis da sua API.
Então tome um tempo para criar os retornos em casos de erros de forma descritiva para o usuário da API.
Mas que ao mesmo tempo não dê informações sensíveis acerca da sua API.
Não exponha dados sensíveis
Não exponha de forma alguma dados sensíveis.
O mesmo vale para dados de acesso.
Seja na URL usando query strings.
Seja em tokens JWT, que por mais que pareçam seguros, são muito fáceis de se decodificar,
Ou até mesmo em Headers de retorno.
Avalie as dependências do projeto
Com o uso cada vez mais comum de bibliotecas externas dentro de grandes projetos o cuidado com a segurança de dependências é muito importante.
Então fique atento a documentação e atualizações das bibliotecas que você utiliza em seus projetos.
Sempre que possível mantenha a versão mais atualizada dos mesmos.
Permita que usuários mudem e monitorem suas chaves de autenticação
Uma forma a mais de melhorar a segurança é permitir que os usuários mudem as chaves de acesso e monitorem o seu próprio uso da API.
Dessa forma caso a chave do usuário tenha vazado ou roubada, ele pode revogar o acesso da chave.
Mas esse tipo de roubo pode ser facilmente descoberto pelo monitoramento.
Melhores práticas na segurança de API – Conclusão
Como visto acima manter uma API segura não é difícil, mas requer um certo trabalho.
Então espero que reveja suas API’s e implemente as Melhores práticas na segurança de API que estejam faltando.
Se quiser mais sobre padrões de segurança na Web eu sugiro a leitura do Open Web Security Project.
Quer mais dicas sobre desenvolvimento? Confira nosso outros posts no blog.