19 práticas recomendadas de segurança de API para implementar e permanecer seguro

A segurança da API é um dos aspectos mais importantes que você precisa cuidar em quase todas as aplicações.

Hoje em dia, APIs são a melhor forma de integrar sua aplicação com outras aplicações. Eles fornecem um gateway para seu aplicativo e, portanto, as APIs precisam ser seguras o suficiente para que você não receba visitantes indesejados.

Vejamos algumas vulnerabilidades de API que podem ser uma ameaça ao seu aplicativo.

Vulnerabilidades comuns de API

#1. Scripting entre sites (XSS)

Os ataques XSS são comuns em aplicações web, mas também podem ocorrer através de APIs se os dados recebidos do usuário não forem devidamente higienizados. Os invasores podem executar scripts maliciosos no servidor e obter acesso a dados confidenciais.

#2. Violação de limitação de taxa

A violação do recurso de limitação de taxa da API pode dar aos invasores a chance de bombardear seu servidor com um grande número de solicitações. Eventualmente, o servidor pode travar e sua base de clientes pode ter dificuldade em entrar em contato com você.

#3. Autenticação inadequada

Se a API não estiver configurada corretamente usando um método de autenticação confiável, qualquer terceiro poderá acessar seu sistema por meio da API. A autorização também é importante porque define quem pode acessar qual recurso da API até um determinado período de tempo.

#4. Transmissão de dados insegura

Os dados que são enviados aos consumidores da sua API devem ser criptografados no caminho. Caso contrário, há chances de que os dados sejam vazados por invasores que usam um ataque man-in-the-middle. É por isso que é sempre recomendado usar um protocolo seguro como HTTPS para transmitir dados.

#5. Dependências obsoletas/desatualizadas

As APIs têm muitas dependências externas que são usadas para realizar tarefas complexas e descarregar alguma lógica complexa. Se essas dependências tiverem uma vulnerabilidade, indiretamente, sua API também se tornará vulnerável. Sempre certifique-se de atualizar as versões de dependência.

Agora que você conhece as vulnerabilidades da API, vejamos algumas práticas recomendadas para proteger sua API.

Leia também: Melhores alternativas de carteiro para testar API para desenvolvedores

Segurança de API – Melhores Práticas

Versionamento de API

É crucial monitorar e atualizar regularmente suas APIs com dependências atualizadas, pois essas dependências podem conter vulnerabilidades importantes. Você pode notificar os usuários da API lançando uma versão de patch da API de acordo com o versionamento semântico.

Manter sua API atualizada é o mínimo que você pode fazer para evitar que ela seja explorada por invasores.

Autenticação

Existem várias maneiras de autenticar um usuário da API. A maneira mais simples é usar a abordagem nome de usuário/senha, mas isso é muito básico e depende apenas da força da senha.

Outra maneira é usar chaves de API para acessar a API. Você pode fornecer a cada usuário da API uma chave exclusiva que ele pode usar.

A autenticação JWT é uma técnica na qual as credenciais do usuário são convertidas em um token assinado digitalmente e depois enviadas ao usuário. O usuário então envia o mesmo token de volta em cada solicitação ao servidor para validação do servidor. JWTs também têm um prazo de validade.

A solução mais eficaz é OAuth. Ele permite o acesso de terceiros à API com credenciais de login já existentes. Por exemplo, se você já estiver conectado ao Google, um aplicativo poderá usar essas credenciais para fazer login na sua conta sem precisar de uma senha. Sua conta do Google se torna a senha.

Autorização

Autorização é algo diferente de autenticação. Enquanto você autoriza um usuário, ele já está autenticado para usar sua API, e é apenas esse recurso de API que ele pode acessar.

Por exemplo, um professor universitário pode ter acesso a todos os alunos de um lote, mas um único aluno só pode acessar seus dados. Neste caso, o aluno e o professor estão autenticados no mesmo sistema, mas só estão autorizados a realizar determinadas ações.

Garantir que a autorização da API funcione bem pode impedir o acesso não autorizado a um recurso.

Redação de dados

A redação de dados é o processo de revelar seletivamente informações aos usuários e proteger informações confidenciais. A autorização adequada pode levar a uma melhor redação dos dados. As regulamentações de privacidade de dados, como o GDPR, também se baseiam na redação de dados. Qualquer terceiro indesejado não deve ser capaz de espionar dados pessoais ou confidenciais.

Você pode implementar a reação de dados implementando um middleware ou um gerenciador de gateway.

Criptografia

Esta se tornou a verificação de segurança mais importante do mundo de hoje. A criptografia é obrigatória se você estiver lidando com qualquer tipo de informação confidencial. A menor criptografia que você pode fazer é usar o protocolo HTTPS, que usa handshake TLS (Transport Layer Security) e SSL (Secure Socket Layer).

A criptografia ponta a ponta é outra maneira de proteger firmemente os dados em trânsito. Os dados armazenados no banco de dados também devem ser criptografados no caso de um invasor conseguir invadir o banco de dados e acessar os dados.

Manipulação de erros

Informações sobre a infraestrutura do aplicativo podem vazar para invasores por meio de mensagens de erro detalhadas. Para evitar isso, mantenha as mensagens de erro genéricas e implemente o tratamento de erros personalizado. Certifique-se de que nenhuma informação confidencial do sistema seja registrada nos detalhes do erro.

Validação de entrada e limpeza de dados

A validação de entrada é altamente crucial ao lidar com APIs porque você não conhece a entrada até que o usuário a envie.

Sanitização é o processo de remoção de qualquer código executável indesejado da carga útil. Um invasor pode inserir um script Javascript e, se você não o limpar antes de passá-lo para o HTML, ele será executado como um script e buscará dados.

A higienização inadequada pode levar a ataques de script entre sites (XSS).

Sistemas de detecção de intrusão

Também conhecidos como IDS, os Sistemas de Detecção de Intrusão auxiliam no monitoramento e detecção do tráfego de rede que chega à API. Se encontrar algum comportamento incomum no trânsito, poderá registrar e alertar as autoridades competentes.

Geralmente, existem dois tipos de sistemas: baseados em rede e baseados em host. Em sistemas baseados em rede, o sistema é distribuído entre diferentes pontos de verificação para monitorar o tráfego em vários pontos. Em um sistema baseado em host, ele é implantado em um único host.

Esses sistemas são uma ótima maneira de determinar quem está tentando acessar sua rede antes que eles prejudiquem seus dados.

Lista de permissões de IP

A lista de permissões de IP é uma forma de permitir que apenas endereços IP selecionados acessem sua API e sua rede. Esta técnica pode não funcionar se você tiver uma API pública porque é muito complexa para listar todos os IPs.

É benéfico se você souber que apenas alguns dos aplicativos dos sistemas acessarão sua API.

Tokens da Web JSON

JWTs geralmente são usados ​​para autenticar um usuário, enviando ao usuário um token assinado digitalmente criado a partir de suas credenciais. Funciona porque oculta as credenciais reais do usuário e você também não precisa armazenar as credenciais no banco de dados ou no lado do usuário.

O JWT pode ser dividido em três seções: cabeçalho, carga útil e assinatura. A seção de carga útil contém as credenciais do usuário e o cabeçalho pode conter informações como o algoritmo usado. A seção de assinatura é assinada digitalmente pelo servidor e pelo cliente em cada solicitação subsequente.

Os JWTs geralmente têm uma data de validade, após a qual um novo token é gerado pelo servidor e enviado ao usuário.

Registro e monitoramento

Monitorar o tráfego para sua API pode ser benéfico para detectar e identificar visitantes indesejados com antecedência. Você pode monitorar cada solicitação, mas certifique-se de que os logs não contenham informações confidenciais.

Limitação de taxa

Se uma API não implementar limitação de taxa, ela estará vulnerável a ataques DDoS devido ao fluxo inesperado de tráfego de rede. Os invasores podem inundar o sistema com um grande número de solicitações em um curto espaço de tempo, eventualmente travando o servidor.

As APIs de limitação e limitação de taxa evitam ataques de negação de serviço, restringindo o fluxo do tráfego da API.

Dependências Seguras

As vulnerabilidades não surgem apenas do código da sua API, elas também podem fazer parte de quaisquer dependências de terceiros que você possa estar usando na sua API. É por isso que é importante monitorar e verificar regularmente suas dependências e detectar quaisquer vulnerabilidades que possam estar presentes nelas.

Você pode implementar um trabalho agendado para verificar e atualizar regularmente as dependências se elas puderem ser atualizadas com uma versão de patch que corrija a vulnerabilidade. Além disso, escolha dependências que sejam mais seguras e forneçam atualizações de segurança frequentes.

Os cabeçalhos de segurança devem ser retornados com a resposta da API para instruir o navegador sobre a segurança da API e como ela deve agir. Cabeçalhos importantes que você pode enviar para melhorar a segurança são:

  • Cache-Control: Defina-o como no-store para evitar o armazenamento de informações confidenciais no navegador.
  • Política de segurança de conteúdo: defini-lo como ancestrais de quadro ‘nenhum’ evita enquadrar as respostas da API em um iframe.
  • Content-Type: Este cabeçalho é importante porque sem ele o navegador tenta adivinhar o tipo de resposta da API e pode levar a ataques de detecção. Para resposta JSON, você pode configurá-la para application/json.
  • X-Content-Type-Options: Defina-o como nosniff para instruir o navegador a não adivinhar o tipo MIME da resposta e a procurá-lo apenas no cabeçalho Content-Type.

Padrões e estruturas de segurança

Projete sua API com a ajuda de estruturas e padrões de segurança predefinidos para garantir que sua API esteja atualizada com as considerações de segurança mais recentes.

Expiração do token

Se você estiver usando tokens ao portador, o tempo de expiração do token deverá ser curto porque requer a reautenticação do usuário, o que é uma coisa boa. No JWT, geralmente existem dois tokens: tokens de acesso e tokens de atualização. Os tokens de atualização têm vida longa, enquanto os tokens de acesso têm vida curta. Em qualquer caso, seus tokens devem ter um prazo de validade.

Firewall de aplicativos da Web

Um WAF, também conhecido como Web Application Firewall, é um gateway que monitora, filtra e bloqueia qualquer tráfego de rede malicioso. Muitas vezes é a melhor maneira de prevenir ataques maliciosos através do protocolo HTTP.

Usando gateways de API

Se você deseja configurar facilmente a segurança da API e gerenciar rotas de API e seu acesso, você pode optar por gateways de API. Eles também fornecem ferramentas de monitoramento, registro e análise, que você pode usar para monitorar sua API.

Confiança Zero

A ideia por trás da estratégia de confiança zero é não confiar em nenhuma fonte centralizada. A segurança deve ser dividida em camadas e implementada em vários pontos de verificação.

Basicamente, ninguém é confiável, nem mesmo os desenvolvedores que trabalham na API. Cada gateway deve ser monitorado e analisado para evitar violações de segurança.

A automação é útil nesses casos. Você pode usar ferramentas automatizadas para monitorar e bloquear regularmente atividades incomuns ou suspeitas.

Palavras Finais

Você não pode fazer muito para manter suas APIs seguras. Sempre existem algumas lacunas no software que podem ser exploradas. Essas lacunas resultam em vulnerabilidades de dia zero. Portanto, para proteger suas APIs, o mínimo que você pode fazer é mantê-las atualizadas com os padrões de segurança mais recentes.

Dê uma olhada nas melhores ferramentas de teste dinâmico de segurança de aplicativos.