Skip to main content

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.com e https://blog.postman.com/tag/api-first.
  • Origem diferente:
    • http://blog.postman.com e https://blog.postman.com (esquema diferente).
    • https://blog.postman.com:3000 e https://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, HEAD ou POST.
    • Utilizam apenas cabeçalhos simples como Accept, Accept-Language, Content-Language e Content-Type com valores seguros (ex.: application/x-www-form-urlencoded, multipart/form-data, text/plain).
  • Solicitações de simulação (preflight):

    • Enviadas para verificação antes da solicitação real.
    • Usam o método OPTIONS para 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

  1. Segurança aprimorada: Protege contra ataques como CSRF e acessos não autorizados.
  2. Autenticação de origem cruzada: Permite transmissão segura de credenciais, essencial para mecanismos como Single Sign-On (SSO).
  3. Padronização: Garante uma abordagem consistente entre navegadores.
  4. 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-Age para 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-Credentials for 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.