Artigos sobre: FAQs

CORS: Conceito, Solução e Riscos em API REST com Chave API

Origem do erro CORS



CORS, um acrônimo para Cross-Origin Resource Sharing, é um mecanismo implementado em navegadores da web para permitir que os recursos de uma página da web sejam solicitados a um domínio diferente daquele que serviu a primeira página. Este mecanismo foi projetado para proteger o usuário contra ataques maliciosos que podem comprometer seus dados por meio de solicitações entre sites.

O erro CORS surge quando um aplicativo da web tenta fazer uma solicitação a uma API hospedada em um domínio diferente do aplicativo. Por exemplo, se seu aplicativo em https://miapp.com tentar acessar uma API em https://api.externo.com, o navegador bloqueará a solicitação devido à sua política de mesma origem, a menos que a API externa tenha configurado corretamente Cabeçalhos CORS para permitir solicitações do seu domínio.

Exemplo de erro CORS


Sem a configuração adequada do CORS, uma solicitação AJAX de https://miapp.com para https://api.externo.com falharia:

fetch("https://api.externo.com/datos")
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error al realizar la petición:', error));


O navegador exibirá um erro semelhante a:


Access to fetch at 'https://api.externo.com/datos' from origin 'https://miapp.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.


Solução: Habilitar Domínio de Origem



Para resolver o erro CORS, o servidor API deve incluir o cabeçalho Access-Control-Allow-Origin em sua resposta, especificando os domínios que têm permissão para acessar os recursos. Isso pode ser definido de maneira geral ou específica para determinados domínios.

Riscos ao usar chave de API para autorização



Usar chaves de API como método de autorização em conjunto com CORS representa um risco significativo. Ao fazer solicitações diretamente do FrontEnd, a chave da API pode ser exposta através do código-fonte do navegador ou de ferramentas de desenvolvimento, colocando em risco a segurança da API e a integridade dos dados.

Exemplo de exposição de chave de API


fetch("https://api.externo.com/datos?apiKey=MI_API_KEY_SECRETA")
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));


Nesse caso, qualquer pessoa com acesso ao navegador poderá ver facilmente a chave de API usada na solicitação.

Recomendação: Faça conexões pelo backend



Para mitigar os riscos de segurança associados à exposição de chaves de API e outros dados confidenciais, é recomendável fazer solicitações a APIs externas a partir do BackEnd da aplicação. Dessa forma, a lógica de autorização e o manuseio das chaves API permanecem ocultos e seguros no servidor.

Exemplo de solicitação do BackEnd


const fetch = require('node-fetch');

// Función para realizar la solicitud a la API externa desde el servidor
function obtenerDatosDesdeAPI() {
  const url = "https://api.externo.com/datos?apiKey=MI_API_KEY_SECRETA";
  
  fetch(url)
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error al realizar la petición:', error));
}


Ao fazer solicitações através do servidor, você preserva a segurança das informações sensíveis e evita o risco de expor dados sensíveis ao cliente.

Concluindo, embora o CORS seja uma solução eficaz para permitir solicitações de origem cruzada, é crucial lidar com a segurança das chaves de API e de outros dados confidenciais, preferindo fazer solicitações confidenciais do servidor para garantir a segurança e integridade da aplicação e seus usuários.

Se você também deseja fazer solicitações a partir do seu FrontEnd, entre em contato conosco pelo e-mail success@icommkt.com, e envie-nos o domínio a partir do qual serão feitas as solicitações

Atualizado em: 29/04/2024

Este artigo foi útil?

Compartilhe seu feedback

Cancelar

Obrigado!