CORS: O que é e como afeta o desenvolvimento de sistemas

O CORS (Cross-Origin Resource Sharing) é um mecanismo de segurança implementado pelos navegadores web para proteger os usuários de ataques maliciosos que possam ser executados por meio de requisições HTTP. Com o CORS, o navegador pode restringir o acesso a recursos de um site a partir de outro site, evitando que scripts não autorizados possam ser executados em nome do usuário.

Para entender como o CORS funciona, é importante conhecer o conceito de mesma origem (same-origin). Do ponto de vista do navegador, duas URLs pertencem à mesma origem se elas possuem o mesmo esquema (http/https), o mesmo host (domínio) e a mesma porta. Por exemplo, as URLs “https://www.exemplo.com.br/” e “https://blog.exemplo.com.br/” pertencem à mesma origem, enquanto “https://www.exemplo.com.br/” e “https://www.google.com.br/” pertencem a origens diferentes.

Quando uma página HTML faz uma requisição para uma URL que pertence a uma origem diferente, o navegador verifica se o servidor que hospeda o recurso permite o acesso a partir da origem da página. Essa verificação é realizada por meio de um cabeçalho HTTP chamado “Access-Control-Allow-Origin”. Se o cabeçalho não estiver presente ou não permitir o acesso, o navegador bloqueia a requisição e lança uma exceção.

O CORS é uma medida de segurança importante, mas pode causar problemas para os desenvolvedores que precisam fazer requisições entre origens diferentes, como em aplicações SPA (Single Page Applications) que consomem APIs de terceiros. Nesses casos, é preciso configurar o servidor para permitir o acesso a partir de outras origens.

Uma forma comum de permitir o acesso é usando o cabeçalho “Access-Control-Allow-Origin” com o valor “*”, que permite o acesso a partir de qualquer origem. No entanto, essa abordagem pode expor o servidor a ataques de CSRF (Cross-Site Request Forgery), em que um site malicioso envia requisições em nome do usuário para o servidor vulnerável.

Uma solução mais segura é permitir o acesso a partir de uma lista predefinida de origens confiáveis. Isso pode ser feito usando o cabeçalho “Access-Control-Allow-Origin” com o valor da origem permitida. Por exemplo, se uma API precisa ser acessada a partir do domínio “https://www.exemplo.com.br/”, o servidor pode enviar o cabeçalho “Access-Control-Allow-Origin: https://www.exemplo.com.br/” para permitir o acesso.

Outra opção é permitir o acesso a partir de várias origens confiáveis, usando o cabeçalho “Access-Control-Allow-Origin” com uma lista separada por vírgulas. Por exemplo, se uma API precisa ser acessada a partir dos domínios “https://www.exemplo.com.br/” e “https://blog.exemplo.com.br/”, o servidor pode enviar o cabeçalho “Access-Control-Allow-Origin: https://www.exemplo.com.br, https://blog.exemplo.com.br”.

Além do cabeçalho “Access-Control-Allow-Origin”, o CORS também utiliza outros cabeçalhos HTTP para controlar o acesso aos recursos. Esses cabeçalhos incluem “Access-Control-Allow-Methods” (para definir os métodos HTTP permitidos), “

Access-Control-Allow-Headers” (para definir os cabeçalhos HTTP permitidos), “Access-Control-Allow-Credentials” (para permitir o envio de cookies) e “Access-Control-Expose-Headers” (para definir quais cabeçalhos HTTP podem ser expostos ao cliente).

O desenvolvimento de sistemas que utilizam recursos de origens diferentes requer um cuidado especial com a configuração do CORS. É importante garantir que o servidor esteja configurado de forma segura e que a origem do cliente seja validada antes de permitir o acesso. Caso contrário, o sistema pode estar vulnerável a ataques de CSRF e outros tipos de ataques maliciosos.

Para desenvolvedores que precisam implementar o CORS em seus sistemas, existem diversas bibliotecas e frameworks disponíveis que facilitam a configuração e o gerenciamento do CORS. Entre as opções mais populares estão o cors-anywhere, o cors, o corsproxy e o express-cors.

Em resumo, o CORS é um mecanismo importante para proteger os usuários de ataques maliciosos que possam ser executados por meio de requisições HTTP. Embora possa ser um desafio para os desenvolvedores que precisam fazer requisições entre origens diferentes, o uso adequado do CORS pode garantir a segurança e a integridade dos sistemas desenvolvidos.

Links relevantes:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima