Voltar ao início

Implementando Cross-Origin Resource Sharing (CORS) em PHP

O CORS (Cross-Origin Resource Sharing) é uma política de segurança utilizada pelos navegadores para limitar as requisições de recursos feitas por scripts que rodam em um site em um domínio diferente do site que fornece os recursos.

Por padrão, navegadores web bloqueiam solicitações AJAX (XMLHttpRequest) para diferentes origens (domínios). Isto é uma medida de segurança para evitar ataques de Cross-Site Scripting (XSS), pois essas solicitações podem permitir que um atacante execute um script malicioso em um site. No entanto, há situações em que é necessário permitir que um site faça solicitações a partir de outro domínio, como ao consumir um serviço de API fornecido por um domínio diferente. Nesses casos, é preciso utilizar o cabeçalho CORS para permitir que o navegador faça essas solicitações.

Neste artigo, vou mostrar como implementar o cabeçalho CORS em PHP para permitir que um site faça solicitações AJAX a partir de um domínio diferente.

Antes de começar, é importante lembrar que, ao permitir solicitações de origens diferentes, estamos abrindo uma brecha na segurança do nosso site. Portanto, é fundamental definir corretamente quais origens serão permitidas e quais métodos e cabeçalhos serão aceitos.

Habilitando o CORS no servidor

Para habilitar o CORS no servidor, precisamos adicionar o cabeçalho “Access-Control-Allow-Origin” na resposta HTTP do servidor. Este cabeçalho informa ao navegador que o site de origem permitido para as solicitações. Para permitir solicitações de qualquer origem, podemos definir o valor do cabeçalho como “*”. No entanto, é altamente recomendável definir apenas os domínios específicos que terão permissão para fazer solicitações.

O código a seguir mostra como adicionar o cabeçalho “Access-Control-Allow-Origin” em uma resposta HTTP usando o PHP:

header("Access-Control-Allow-Origin: https://www.exemplo.com.br");

Especificando os métodos e cabeçalhos permitidos

Além de permitir a origem das solicitações, também é possível especificar quais métodos HTTP e cabeçalhos são permitidos nas solicitações. Para isso, é necessário adicionar o cabeçalho “Access-Control-Allow-Methods” e “Access-Control-Allow-Headers” na resposta HTTP.

O código a seguir mostra como adicionar esses cabeçalhos em uma resposta HTTP usando o PHP:

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

No exemplo acima, estamos permitindo solicitações HTTP GET, POST e OPTIONS, além do cabeçalho “Content-Type”.

Espero que tenham gostado, até a próxima 😉