Las solicitudes entre dominios siempre han sido un aspecto complicado del desarrollo web. Cuando se trata de enviar solicitudes AJAX desde un subdominio a otro, la gestión de cookies puede ser aún más compleja. Sin embargo, con las técnicas y configuraciones adecuadas, es posible configurar cookies en subdominios de forma segura y eficiente. En este artículo, exploraremos cómo lograr esto usando PHP, al tiempo que garantizamos que se implementan las medidas de seguridad adecuadas.
Entendiendo el desafío de las cookies entre dominios
Las solicitudes entre dominios pueden suponer un riesgo para la seguridad, ya que pueden permitir que sitios web maliciosos accedan a datos confidenciales. Para mitigar este riesgo, los navegadores web aplican un mecanismo de seguridad conocido como “Política del mismo origen”. Esta política impide que las páginas web realicen solicitudes a un dominio diferente del que proporcionó la página web. Sin embargo, existen casos de uso legítimos en los que las solicitudes entre dominios son necesarias.
En este escenario, queremos establecer una cookie en un subdominio (por ejemplo, aplicación.tudominio.com
) de una solicitud AJAX originada desde otro subdominio (por ejemplo, www.tudominio.com
). Para lograr esto, necesitamos configurar correctamente los componentes del lado del servidor y del lado del cliente.
Configuración del lado del servidor con PHP
En el lado del servidor, debemos gestionar las solicitudes entrantes y responder con los encabezados adecuados para permitir solicitudes de origen cruzado y la configuración de cookies. A continuación, se incluye un fragmento de código PHP que demuestra la configuración necesaria del lado del servidor:
<?php // Enable CORS (Cross-Origin Resource Sharing) to allow requests from other domains.
header('Control de acceso-Permitir-credenciales: verdadero');
header('Control de acceso-Permitir-Origen: https://www.sudominio.com');
// Reemplazar con su dominio. // Establecer la cookie en el subdominio.
$cookieName = 'miCookie';
$cookieValue = '¡Hola desde el subdominio!';
$cookieDomain = '.tudominio.com';
// Tenga en cuenta el punto inicial para los subdominios.
$cookiePath= '/';
$cookieSecure = verdadero;
// Establezca en verdadero si usa HTTPS.
$cookieHttpOnly = true; // Mejora la seguridad evitando el acceso a JavaScript.
setcookie($cookieName, $cookieValue, 0, $cookiePath, $cookieDomain, $cookieSecure, $cookieHttpOnly);
// Devuelve una respuesta a la solicitud AJAX.
echo '¡Cookie establecida en el subdominio!';
Este fragmento de código PHP hace lo siguiente:
- Habilita CORS configurando encabezados apropiados para permitir solicitudes de origen cruzado.
- Establece una cookie con el nombre, valor y configuración especificados.
- Responde con un mensaje para confirmar que se ha configurado la cookie.
Configuración del lado del cliente con JavaScript/jQuery
En el lado del cliente, debe configurar su solicitud AJAX para que gestione las credenciales y las solicitudes de origen cruzado de forma adecuada. A continuación, se muestran dos ejemplos: uno con jQuery y el otro con la API Fetch.
Usando jQuery:
$.ajax({ url: 'https://app.yourdomain.com/api.php',
// Reemplace con la URL de API de su subdominio.
xhrCampos: {
withCredentials: true // Permitir cookies en solicitudes de origen cruzado.
},
éxito: función(respuesta) { console.log(respuesta); // Salida: "¡Cookie establecida en el subdominio!" } });
Usando la API Fetch:
buscar('https://app.tudominio.com/api.php', { credenciales: "incluir" }) .then(respuesta => respuesta.texto()) .then(datos => {consola.log(datos); });
En ambos ejemplos, la clave es incluir la con credenciales
Opción en la configuración de la solicitud AJAX. Esto le indica al navegador que incluya todas las cookies asociadas con el subdominio al realizar la solicitud.
Consideraciones de seguridad
Al trabajar con cookies y solicitudes de origen cruzado, la seguridad debe ser una prioridad máxima. A continuación, se indican algunas consideraciones de seguridad que se deben tener en cuenta:
- Comunicación segura:Asegúrese de que su subdominio utilice HTTPS para cifrar los datos en tránsito.
- Cookies solo HTTP:Establecer el
Sólo HTTP
Marcar las cookies para evitar el acceso a JavaScript del lado del cliente, lo que puede ayudar a mitigar ataques XSS (Cross-Site Scripting). - Ámbito de dominio: Tenga cuidado al configurar cookies en un ámbito de dominio amplio (por ejemplo,
.tudominio.com
). Haga esto solo si es necesario, ya que puede exponer las cookies a otros subdominios. - Control de acceso:Restringe los orígenes a los que se les permite acceder a tu subdominio mediante el
Control de acceso Permitir origen
encabezamiento. - Autenticación y autorización:Implementar mecanismos de autenticación y autorización adecuados para garantizar que los datos confidenciales no queden expuestos a partes no autorizadas.
Si sigue estas prácticas recomendadas, podrá configurar de forma segura cookies en subdominios desde solicitudes AJAX, lo que permitirá que sus aplicaciones web funcionen sin problemas y al mismo tiempo mantengan la seguridad.