Saltar al contenido principal

isSameDomain

Paquete: @tiendana/utils

Verifica si dos URLs pertenecen al mismo dominio (host), útil para prevenir ataques de open redirect y validar orígenes de URLs.

Características​

✅ Compara dominios de dos URLs
✅ Incluye puerto en la comparación
✅ Manejo seguro de errores
✅ Retorna false si URLs inválidas
✅ Usa API nativa URL

Firma​

function isSameDomain(url1: string, url2: string): boolean

Parámetros​

ParámetroTipoDescripciónRequerido
url1stringPrimera URL a comparar✅
url2stringSegunda URL a comparar✅

Retorno​

Tipo: boolean

  • true si ambas URLs tienen el mismo host (dominio + puerto)
  • false si los hosts son diferentes o si alguna URL es inválida

Ejemplos de Uso​

Comparación Básica​

import { isSameDomain } from '@tiendana/utils';

isSameDomain('https://example.com/page1', 'https://example.com/page2');
// true

isSameDomain('https://example.com', 'https://other.com');
// false

Safe Redirect​

function safeRedirect(targetUrl: string) {
const currentUrl = window.location.href;

if (isSameDomain(currentUrl, targetUrl)) {
window.location.href = targetUrl;
} else {
alert('No se permite redirección a otro dominio');
}
}

safeRedirect('https://example.com/dashboard'); // ✅ Permite
safeRedirect('https://malicious.com/phishing'); // ❌ Bloquea
function isExternalLink(href: string): boolean {
return !isSameDomain(window.location.href, href);
}

// Agregar target="_blank" a links externos
document.querySelectorAll('a').forEach(link => {
if (isExternalLink(link.href)) {
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
}
});

API Request Validation​

function validateApiUrl(apiUrl: string): boolean {
const allowedDomains = [
'https://api.example.com',
'https://api-staging.example.com'
];

return allowedDomains.some(domain => isSameDomain(apiUrl, domain));
}

if (validateApiUrl(requestUrl)) {
fetch(requestUrl);
} else {
console.error('Dominio de API no permitido');
}

Casos de Uso Comunes​

  • Prevenir open redirects: Validar redirects de usuario
  • Links externos: Detectar y marcar links a otros dominios
  • CORS validation: Verificar origen de requests
  • Security headers: Validar referrer/origin
  • Navigation guards: Controlar navegación entre dominios

Comportamiento​

Subdominios​

isSameDomain('https://example.com', 'https://sub.example.com');
// false (diferentes hosts)

isSameDomain('https://www.example.com', 'https://example.com');
// false (www es subdominio diferente)

Puertos​

isSameDomain('https://example.com:443', 'https://example.com');
// true (443 es el puerto por defecto de https y `URL.host` lo omite)

isSameDomain('https://example.com:8080', 'https://example.com');
// false (diferentes puertos)

isSameDomain('http://localhost:3000', 'http://localhost:4000');
// false (diferentes puertos)

Protocolos​

isSameDomain('http://example.com', 'https://example.com');
// true (⚠️ mismo host, diferente protocolo)

URLs Inválidas​

isSameDomain('invalid-url', 'https://example.com');
// false

isSameDomain('', 'https://example.com');
// false

Ver También​