CORS CON APACHE: CÓMO CONFIGURARLO CORRECTAMENTE
CORS es el acrónimo de Cross-Origin-Resource-Sharing q es un mecanismo que permite o restringe solicitudes HTTP entre diferentes orígenes (dominios, protocolos o puertos) en navegadores web. En el contexto de Apache, CORS se configura para controlar cómo los recursos de tu servidor pueden ser accedidos por aplicaciones web alojadas en otros dominios.Los navegadores rechazan, por defecto, este tipo de peticiones, a través de CORS es posible tanto habilitarlas como especificar que tipo de peticiones y desde donde son permitidas.
Hay dos formas de habilitar CORS:
- Directamente en el servidor Apache a través de un .htaccess.
- En el código específico del contenido o recursos que queremos pedir.
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "https://ejemplo.com"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Max-Age "86400"
</IfModule>
En este caso, al ser un asterisco, indica que se acepta cualquier petición desde cualquier servidor y será tratada como una petición local. Ésto es bastante arriesgado por seguridad, por lo que se recomienda tratar de restringirlo solo a los servidores que tenemos certeza que harán las peticiones, de la siguiente forma:
Header add Access-Control-Allow-Origin
"http://www.example.com"
Manejo de solicitudes preflight (OPTIONS)
Las solicitudes preflight son enviadas automáticamente por los navegadores para verificar si una solicitud CORS es válida. Asegúrate de que tu servidor responda correctamente a las solicitudes OPTIONS. Puedes usar un bloque como este:
<IfModule mod_headers.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>
Se pueden usar las herramientas de desarrollador del navegador (pestaña "Network") para verificar las cabeceras de respuesta. Si algo falla, revisa los logs de Apache (error_log o access_log) para identificar problemas.
Consideraciones de seguridadEvita usar * en producción: Permitir todos los orígenes (Access-Control-Allow-Origin: *) puede ser inseguro, especialmente si tu aplicación maneja datos sensibles o credenciales.
Especifica orígenes concretos: Limita los dominios permitidos a los estrictamente necesarios. Valida métodos y cabeceras: Solo permite los métodos (GET, POST, etc.) y cabeceras necesarios para tu aplicación.
<IfModule mod_headers.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>