CORS
- CORS
CORS, que significa “Cross-Origin Resource Sharing”, é um padrão de segurança que permite aos servidores indicar as origens das quais os navegadores podem solicitar recursos. Ele foi criado para complementar a política de mesma origem (SOP), usada pelos navegadores para evitar que aplicativos maliciosos acessem dados confidenciais em domínios que não controlam.
A Política de Mesma Origem (SOP)
A SOP é um recurso de segurança do navegador que restringe como os recursos podem ser acessados por diferentes aplicativos da web. Para que duas origens sejam consideradas iguais, elas devem ter o mesmo esquema, host e porta. Exemplos:
- Mesma origem:
https://blog.postman.comehttps://blog.postman.com/tag/api-first.
- Origem diferente:
http://blog.postman.comehttps://blog.postman.com(esquema diferente).https://blog.postman.com:3000ehttps://blog.postman.com(porta diferente).
Alguns recursos como imagens, folhas de estilo, scripts, arquivos de mídia e iframes possuem permissões mais relaxadas dentro da SOP.
Como o CORS Funciona?
Enquanto a SOP restringe o acesso de origem cruzada a recursos, o CORS permite que os servidores especifiquem quais origens têm permissão para acessá-los. Ele funciona através do envio de cabeçalhos HTTP em solicitações e respostas.
Solicitações de CORS
Existem dois tipos principais de solicitações CORS:
-
Solicitações simples:
- Utilizam os métodos HTTP
GET,HEADouPOST. - Utilizam apenas cabeçalhos simples como
Accept,Accept-Language,Content-LanguageeContent-Typecom valores seguros (ex.:application/x-www-form-urlencoded,multipart/form-data,text/plain).
- Utilizam os métodos HTTP
-
Solicitações de simulação (preflight):
- Enviadas para verificação antes da solicitação real.
- Usam o método
OPTIONSpara verificar permissões. - Incluem os cabeçalhos:
Access-Control-Request-Method: Indica o método HTTP da solicitação real.Access-Control-Request-Headers: Lista os cabeçalhos personalizados usados na solicitação real.
Se a solicitação de simulação for bem-sucedida, a solicitação real é enviada. Caso contrário, o navegador bloqueia a operação.
Resposta CORS
Os servidores usam cabeçalhos para especificar as permissões de CORS:
Access-Control-Allow-Origin: Indica quais origens têm acesso aos recursos.Access-Control-Allow-Credentials: Determina se credenciais (como cookies) podem ser incluídas nas solicitações de origem cruzada.Access-Control-Allow-Methods: Lista os métodos permitidos.Access-Control-Allow-Headers: Especifica os cabeçalhos permitidos.Access-Control-Max-Age: Define o tempo de cache das respostas de simulação (preflight).Access-Control-Expose-Headers: Especifica quais cabeçalhos podem ser acessíveis pelo cliente.
SetPreflightMaxAge
Uma estratégia eficiente para minimizar a latência associada às solicitações de simulação é configurar o cache dessas respostas no servidor utilizando o cabeçalho Access-Control-Max-Age. A configuração de SetPreflightMaxAge permite que o servidor determine por quanto tempo as respostas das solicitações de simulação podem ser armazenadas no cache do navegador. Isso reduz o número de solicitações OPTIONS e melhora a performance.
Melhores práticas:
- Defina uma duração moderada para evitar o uso de permissões obsoletas. O padrão recomendado é de cinco segundos.
- Evite tempos de cache excessivamente longos, especialmente em aplicações onde as regras de CORS mudam frequentemente.
Benefícios do CORS
- Segurança aprimorada: Protege contra ataques como CSRF e acessos não autorizados.
- Autenticação de origem cruzada: Permite transmissão segura de credenciais, essencial para mecanismos como Single Sign-On (SSO).
- Padronização: Garante uma abordagem consistente entre navegadores.
- Integração de APIs: Facilita a comunicação entre aplicações e serviços de terceiros.
Melhores Práticas para Implementação do CORS
- Evite envenenamento de cache: Defina
Access-Control-Max-Agepara um valor razoável. - Seja explícito:
- Especifique as origens, métodos e cabeçalhos permitidos.
- Evite o uso de curingas (
*) quando não for estritamente necessário.
- Inclua os cabeçalhos necessários: Certifique-se de que todos os cabeçalhos relevantes sejam configurados adequadamente.
- Valide credenciais: Se
Access-Control-Allow-Credentialsfor ativado, valide e manipule as credenciais com segurança. - Documente suas políticas: Crie documentação clara para desenvolvedores que consumirão suas APIs.
Considerações Finais
CORS é uma ferramenta poderosa para garantir a segurança e a flexibilidade de aplicações modernas. Entretanto, sua configuração inadequada pode comprometer a segurança do sistema. Compreender seus fundamentos, fluxos e melhores práticas ajuda a minimizar riscos e criar aplicações seguras e robustas.