Uma API expõe funções e dados a programas. Mal protegida, pode deixar vazar informação, aceitar ações não autorizadas ou colapsar sob uma avalanche de pedidos.

Estas práticas são válidas seja qual for a linguagem usada.

Verificar quem chama, e o que tem o direito de fazer

Autenticação E autorização. Em cada pedido: identificar quem chama (token) e depois verificar os seus direitos sobre o recurso específico em causa. Nunca assumir que um utilizador autenticado tem o direito de fazer tudo nem de ver os dados de outro.

Não confiar em nada do que entra

Validação rigorosa. Controlar o tipo, formato, tamanho e limites de cada parâmetro. Rejeitar por defeito. Desconfiar dos identificadores passados pelo cliente: é assim que passa o acesso direto a um objeto de outrem.

Aguentar a carga

Limitação de taxa e quotas. Limitar o número de pedidos por cliente, por chave e por rota. Prever quotas e um comportamento limpo em caso de excesso, para resistir a abusos e picos de tráfego.

Proteger o transporte e os segredos

  • HTTPS obrigatório, versões de TLS atualizadas.
  • Chaves e segredos fora do código e do repositório, num cofre ou em variáveis de ambiente.
  • Rotação de segredos e possibilidade de revogação.

Ver, versionar, reduzir

  • Registar acessos e erros, monitorizar anomalias, exportar para um SIEM.
  • Versionar a API para que possa evoluir sem quebrar, retirando as versões antigas.
  • Expor apenas os endpoints necessários; manter as dependências atualizadas; testar regularmente (revisão, scan).

Perguntas frequentes

Uma chave de API é suficiente para proteger o acesso?

Não. Uma chave identifica, mas não autoriza de forma detalhada e pode ser roubada. É preciso autenticação, autorização por recurso e limitação de taxa.

Devem mostrar-se mensagens de erro detalhadas?

Não em produção: informam o atacante. Mensagem genérica do lado do cliente, detalhe nos registos do lado do servidor.

Como evitar o acesso direto a um objeto de outrem?

Verificar sempre que quem chama tem direito sobre o identificador pedido; nunca confiar num identificador fornecido sem verificação.