as interfaces de programação web (APIs) fornecem a extremidade traseira para aplicações web e móveis modernas. As chamadas de API Web são responsáveis por mais de 80% de todo o tráfego da web e os criminosos cibernéticos estão cada vez mais visando APIs, por isso garantir a segurança da API web é crucial. As API REST são o tipo mais comum de API web para serviços web. Vamos ver o que pode fazer para garantir a segurança da API.
- What Is a REST API?
- dois níveis de segurança da API de descanso
- garantir o acesso seguro à API
- segurança de conexão
- controle de acesso API
- autorização do utilizador com as chaves API
- restrições de clientes API
- proteger aplicações que expõem APIs
- dados sensíveis na comunicação API
- validação do tipo de conteúdo
- os cabeçalhos de segurança de resposta
- validação de entrada
- Why REST API Security Is Important
- Sobre o Autor
What Is a REST API?
REST (abreviação de transferência de Estado representacional) é um estilo de arquitetura de software para o desenvolvimento da web, geralmente usado com a comunicação HTTP. APIs RESTful (ou simplesmente APIs REST) são interfaces de programação de aplicativos que seguem os princípios de repouso, permitindo que clientes e servidores web interajam com uma grande variedade de recursos web. REST APIs usa verbos HTTP padrão (métodos) e códigos de status para fornecer algum nível de padronização. Eles são acessados através de URLs HTTP e são amplamente utilizados para serviços web.
Nota: APIs REST são apátridas como o protocolo HTTP em si, o que significa que eles não armazenam qualquer informação sobre conexões ou sessões atuais. Os serviços web RESTful oferecem maneiras de acessar e manipular recursos, enquanto a gestão de sessões deve ser tratada pela aplicação.
dois níveis de segurança da API de descanso
Antes de entrarmos nos detalhes técnicos, há uma coisa importante a notar. Uma API Web expõe uma interface para uma aplicação web, então você precisa pensar sobre segurança em dois níveis: acesso à API e, em seguida, acesso à aplicação.
no nível API, você precisa da autenticação adequada, autorização, privilégios de acesso, e assim por diante, para garantir que apenas clientes permitidos podem usar a interface e apenas executar operações permitidas. No nível de aplicação, você precisa garantir que seus endpoints de Aplicação (Os URLs usados para acessar a interface) não são vulneráveis a ataques que passam pela interface ou contorná-la. Vamos ver como pode garantir a segurança da API nestes dois níveis. Para uma discussão detalhada sobre as melhores práticas de segurança da API, consulte a ficha de segurança da OWASP REST.
garantir o acesso seguro à API
a maioria das API web estão expostas à Internet, por isso precisam de mecanismos de segurança adequados para evitar abusos, proteger dados sensíveis e garantir que apenas os utilizadores autenticados e autorizados possam aceder a eles.
segurança de conexão
segurança começa com a conexão HTTP em si. As API de repouso seguro só devem fornecer pontos finais HTTPS para garantir que toda a comunicação da API é cifrada usando SSL/TLS. Isto permite que os clientes autentiquem o serviço e protejam as credenciais da API e os dados transmitidos.
controle de acesso API
muitas API web estão disponíveis apenas para usuários autenticados, por exemplo, porque eles são privados ou exigem registro ou pagamento. Como as API de descanso são apátridas, o controle de acesso é controlado pelos terminais locais. Os métodos de autenticação da API de descanso mais comuns são::
- Autenticação Básica de HTTP: as credenciais são enviadas directamente nos cabeçalhos de HTTP na codificação Base64 sem encriptação. Este é o método de autenticação mais simples e o mais fácil de implementar. Ele também é o menos seguro, uma vez que os dados confidenciais são transmitidos como texto simples, então ele só deve ser usado em combinação com HTTPS.
- fichas Web JSON( JWT): credenciais e outros parâmetros de acesso são enviados como estruturas de dados JSON. Estes tokens de acesso podem ser assinados criptograficamente e são a forma preferida de controlar o acesso a APIs de descanso. Veja a folha de batota do OWASP JWT para uma rápida visão geral dos Tokens da Web JSON, e RFC 7519 para a especificação completa.
- OAuth: mecanismos padrão OAuth 2.0 podem ser usados para autenticação e autorização. O OpenID Connect permite a autenticação segura sobre o OAuth 2.0. Por exemplo, as APIs do Google usam OAuth 2.0 para autenticação e autorização.
autorização do utilizador com as chaves API
as chaves API fornecem uma forma de controlar o acesso aos serviços públicos de repouso. Os operadores de serviços web públicos podem usar chaves API para impor limites de taxa para chamadas API e mitigar ataques de negação de serviço. Para serviços monetizados, as organizações podem usar chaves API para fornecer acesso com base no plano de acesso comprado.
restrições de clientes API
para minimizar os riscos de segurança, os operadores de serviço de repouso devem restringir a ligação dos clientes às capacidades mínimas exigidas para o serviço. Isto começa com a restrição de métodos HTTP suportados para se certificar de que clientes mal-configurados ou maliciosos não podem realizar quaisquer ações além da especificação da API e nível de acesso permitido. Por exemplo, se a API apenas permite obter pedidos, POST e outros tipos de pedidos devem ser rejeitados com o método do código de resposta 405 não permitido.
proteger aplicações que expõem APIs
uma vez que o cliente tem acesso legítimo, você precisa proteger a aplicação web subjacente de insumos malformados e maliciosos. As chamadas e respostas da API de repouso também podem incluir dados confidenciais que precisam ser controlados.
dados sensíveis na comunicação API
as chamadas API muitas vezes incluem credenciais, chaves API, tokens de sessão e outras informações sensíveis. Se incluídos diretamente em URLs, esses detalhes podem ser armazenados em logs de servidores web e vazados se os logs forem acessados por criminosos cibernéticos. Para evitar vazar informações confidenciais, os serviços RESTful web devem sempre enviá-lo em cabeçalhos de solicitação HTTP ou o corpo de solicitação (para POST e colocar pedidos).
validação do tipo de conteúdo
continuando o tema das restrições do cliente API, os Serviços de repouso devem definir com precisão os tipos de conteúdo permitidos e rejeitar pedidos que não tenham as declarações corretas nos seus cabeçalhos HTTP. Isto significa especificar cuidadosamente os tipos permitidos tanto no cabeçalho Content-Type
como no Accept
, juntamente com a codificação (sempre que possível). Se o serviço inclui JavaScript( ou outro código de script), ele deve garantir que o tipo de conteúdo no cabeçalho é o mesmo que no corpo do pedido, por exemplo application/javascript
. Isto ajuda a prevenir ataques de injeção no cabeçalho.
os cabeçalhos de segurança de resposta
os cabeçalhos de segurança HTTP adicionais podem ser definidos para restringir ainda mais o tipo e o âmbito dos pedidos. Estes incluem X-Content-Type-Options: nosniff
para prevenir ataques XSS baseados em sniffing MIME e X-Frame-Options: deny
para prevenir tentativas de clickjacking em navegadores mais antigos.
se o serviço não suporta chamadas cross-domain, ele deve desativar o CORS (cross-origin resource sharing) em seus cabeçalhos de resposta. Se tais chamadas são esperadas, os cabeçalhos do CORS devem especificar com precisão as origens permitidas.
validação de entrada
as API são concebidas para acesso automatizado sem interacção com o Utilizador, pelo que é especialmente importante garantir que todas as entradas são válidas e esperadas. Quaisquer pedidos que não estejam em conformidade com a especificação API devem ser rejeitados. Aplicam-se orientações típicas de boas práticas para a validação dos dados introduzidos:
- tratar todos os parâmetros, objectos e outros dados de entrada como não confiáveis.
- utilizar a funcionalidade de validação incorporada quando disponível.
- verifique o tamanho do pedido, o comprimento do conteúdo e o tipo.
- utilize uma tipagem forte para os parâmetros da API (se for suportada).
- para evitar a injecção de SQL, evite a realização de consultas manualmente-use consultas parametrizadas em vez disso.
- valores dos parâmetros Whitelist e entradas de texto sempre que possível.
- registar todas as falhas de validação da entrada para detectar tentativas de enchimento credencial.
Why REST API Security Is Important
Web APIs are the backbone of modern web and mobile development. Permitem que aplicações e serviços comuniquem e troquem dados entre plataformas de hardware e software. Enquanto outros formatos de API ainda estão em uso (por exemplo SOAP), as API REST são agora o tipo dominante, representando mais de 80% de todas as API Web públicas. Eles fornecem o back end para a maioria das aplicações móveis e dispositivos IoT e permitem uma fácil integração entre sistemas e aplicações.
porque eles usam as mesmas tecnologias que aplicações web, as APIs REST podem ser vulneráveis aos mesmos ataques. Ao mesmo tempo, APIs não são projetados para acesso manual, de modo que eles podem ser difíceis de testar, especialmente se alguns endpoints e recursos são indocumentados. O teste de segurança da API requer ferramentas automatizadas precisas para garantir a cobertura completa. O Netsparker fornece suporte completo para a varredura de vulnerabilidade da API de descanso com uma variedade de métodos de autenticação e reescrita automática de URL.
veja a documentação do site de testes da API do Netsparker REST para obter detalhes técnicos completos e leia o nosso artigo completo sobre as APIs de exploração de vulnerabilidades com o Netsparker.
Sobre o Autor
Conteúdo Técnico Escritor Netsparker. Baseando-se em sua experiência como jornalista de TI e tradutor técnico, ele faz o seu melhor para trazer a segurança da web para um público mais amplo no blog e site da Netsparker.