Configurando CORS no PHP para proteger sua API e evitar vulnerabilidades

Métodos para configurar CORS no PHP corretamente, evitando vulnerabilidades de segurança e protegendo APIs contra acessos não autorizados.

Introdução

O CORS (Cross-Origin Resource Sharing) define quais origens podem acessar recursos da sua aplicação PHP. Configurá-lo corretamente evita vulnerabilidades como Cross-Site Scripting (XSS) e Cross-Site Request Forgery (CSRF), protegendo suas APIs contra requisições maliciosas.

1. O que é CORS e por que é importante?

CORS é um mecanismo de segurança que permite ou bloqueia requisições feitas a partir de domínios diferentes do servidor de origem. Sem uma configuração adequada, sua API pode estar vulnerável a ataques.

2. Configurando CORS corretamente no PHP

Para permitir apenas requisições de domínios específicos, podemos configurar os cabeçalhos HTTP corretamente:

header("Access-Control-Allow-Origin: https://meusite.com");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

Isso garante que apenas https://meusite.com possa acessar a API e apenas os métodos GET, POST e OPTIONS sejam permitidos.

3. Respondendo requisições preflight

Browsers enviam uma requisição OPTIONS antes de executar uma requisição real para verificar as permissões CORS. Podemos tratá-la diretamente no PHP:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header("HTTP/1.1 200 OK");
    exit();
}

Isso evita que o navegador bloqueie requisições legítimas por falta de resposta.

4. Configuração segura de CORS para APIs públicas

Se sua API for pública, mas você quer evitar riscos, permita apenas os métodos e cabeçalhos necessários:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

Nunca use * em APIs que lidam com dados sensíveis sem uma política de segurança bem definida.

5. Bloqueando origens suspeitas

Se quiser restringir acessos de domínios não autorizados, implemente um controle dinâmico de CORS:

$origens_permitidas = ['https://meusite.com', 'https://parceiro.com'];
if (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $origens_permitidas)) {
    header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);
}

Isso garante que apenas domínios autorizados possam fazer requisições.

Conclusão

Configurar CORS corretamente no PHP evita que aplicações sejam exploradas por sites maliciosos e protege APIs contra acessos não autorizados. Restringir origens confiáveis, definir métodos permitidos e validar requisições prévias são passos essenciais para fortalecer a segurança da aplicação.

A configuração incorreta de CORS pode resultar em vazamento de dados e acessos não autorizados. Muitas APIs expõem seus recursos para qualquer origem, permitindo que sites maliciosos realizem requisições sem o consentimento do usuário.

A melhor prática para evitar problemas de segurança é restringir o acesso apenas a domínios confiáveis e limitar os métodos e cabeçalhos permitidos. Implementar regras específicas para cada cenário reduz a exposição da aplicação e minimiza riscos.

Além disso, é importante testar as configurações com ferramentas como o curl ou extensões para navegadores, garantindo que apenas requisições legítimas sejam processadas. Uma abordagem bem planejada para CORS melhora a segurança e o desempenho da API.

Algumas aplicações:

  • Permitir apenas acessos autorizados à API de um domínio específico.
  • Evitar requisições não autorizadas e acessos indevidos a dados sensíveis.
  • Melhorar a segurança da comunicação entre frontend e backend.
  • Reduzir o risco de ataques *Cross-Origin* e requisições maliciosas.

Dicas para quem está começando

  • Evite definir Access-Control-Allow-Origin: * em APIs com informações sensíveis.
  • Sempre restrinja os métodos HTTP e cabeçalhos permitidos.
  • Responda requisições OPTIONS corretamente para evitar bloqueios do navegador.
  • Use listas de origens permitidas para maior controle sobre quem pode acessar sua API.
  • Teste a configuração de CORS com ferramentas como curl para validar a segurança.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como configurar CORS corretamente para evitar problemas de segurança no PHP?

Compartilhe este tutorial

Continue aprendendo:

Como mitigar ataques de Requisição Falsificada entre Sites (CSRF) no PHP?

Métodos para evitar ataques CSRF no PHP, garantindo que ações sensíveis só sejam executadas por usuários autorizados.

Tutorial anterior

Como proteger cookies de sessão contra roubo no PHP?

Métodos para proteger cookies de sessão no PHP, garantindo segurança contra ataques como Session Hijacking e Session Fixation.

Próximo tutorial