Analizar URL

Pega una dirección y mírala como la ve un navegador: esquema, host, puerto, ruta, query y fragmento, además de cada parámetro en su propia línea. Se descompone con el analizador que el navegador trae incorporado — el mismo que decide a dónde lleva realmente un clic — y no con una expresión regular que juzgaría distinto justo en los casos límite.

Resultado

La respuesta aparece aquí mientras escribes.

  • Dónde se ejecuta

    No se sube nada, porque no hay archivo: se calcula en esta misma página.

  • Sin cola y sin cuenta

    Responde tan rápido como dé tu máquina, y nunca pregunta quién eres.

  • Tantas veces como quieras

    No se cuenta nada ni se limita nada: volver a responder no nos cuesta nada.

Cómo funciona

  1. Pega la dirección. Si falta el esquema, se supone https.
  2. Lee las partes por separado, con los parámetros del query string.
  3. No se ha subido nada, y tampoco se ha visitado nada.

El mismo analizador que usa tu navegador

La descomposición viene de la interfaz `URL` incorporada y no de una expresión regular escrita a mano. Ese es el punto donde se separan las herramientas de este género: la especificación de la WHATWG está llena de reglas que uno no sospecha al construirlas por su cuenta, y en esas reglas viven los errores interesantes.

Un ejemplo es la normalización del host: se unifica el uso de mayúsculas, se quita un punto final y los nombres internacionalizados se convierten a Punycode. Una expresión regular lo deja todo tal cual, y entonces señala una diferencia entre dos direcciones que para cualquier navegador son la misma.

El host es el sitio donde esto se pone serio

En `https://[email protected]/` el host es `malicioso.example` y no `ejemplo.com`: todo lo anterior a la arroba son credenciales. Es conforme a la norma y es la base de una de las técnicas de phishing más antiguas que existen, porque la vista se queda en el primer nombre conocido.

Por eso el host tiene aquí su propia línea. Quien revise una dirección sospechosa no tiene que contar, sino leer a dónde apunta de verdad. Y va en el mismo paquete: un nombre como `ejemplo.com.malicioso.example` es también una dirección en `malicioso.example`, porque lo que manda es el último par de etiquetas.

Aquí no se visita nada

La dirección se descompone, no se abre. No hay petición al host, no hay vista previa y no hay resolución de redirecciones, y es una decisión y no una función que falte: quien está examinando una URL sospechosa es el último que quiere que la herramienta la visite.

Visitarla además delataría algo. La petición saldría de un servidor, su IP y la hora quedarían en el registro del otro lado, y con una dirección de un solo uso — un enlace de confirmación, un restablecimiento de contraseña — la gastaría por el camino. Descomponer es la operación inofensiva, y es la única que ocurre aquí.

Por qué la ruta sale más corta de lo que la escribiste

Un `..` en la ruta se resuelve al analizar: `/docs/a/../b` se convierte en `/docs/b`. Forma parte de la normalización y no es algo que esta herramienta añada — cualquier navegador lo hace antes de lanzar la petición, y un servidor no ve nunca la forma original.

Importa en todo lo que compare rutas o decida permisos sobre ellas. Quien compruebe una regla de acceso contra la cadena en bruto en lugar de contra la ruta normalizada está comprobando otra cosa distinta de la que se va a pedir — el agujero que se conoce como path traversal desde hace décadas.

El fragmento no viaja en ninguna petición

Todo lo que va después de `#` se queda en el navegador. No aparece en ninguna petición, no llega a ningún servidor y no consta en ningún registro de acceso. Es una propiedad de HTTP y no una función de privacidad, y corta en las dos direcciones.

Es útil porque un valor ahí no llega al servidor — históricamente, el motivo por el que los tokens de OAuth viajaban en el fragmento. Es incómodo porque aun así queda en el historial, en la cadena de referrer de algunos scripts y en cualquier enlace compartido. «No llega al servidor» no significa «es privado».

El puerto que no aparece

Si el puerto es el habitual del esquema — 443 en https, 80 en http — el analizador lo omite, porque es redundante. `https://ejemplo.com:443/` y `https://ejemplo.com/` son la misma dirección, y la normalización lo hace visible.

Es la explicación habitual de que una comparación entre dos cadenas de URL falle aunque las dos signifiquen lo mismo. Quien compare direcciones debería pasarlas antes por un analizador y comparar la forma normalizada, que es justo la que aparece aquí en las líneas.

Casi todo es un esquema

Una errata como `htp://ejemplo.com` no se rechaza: se lee como una dirección con el esquema `htp`. No es un fallo del analizador — la especificación admite cualquier esquema, porque hay cientos: `mailto:`, `tel:`, `git+ssh:`, `spotify:`, y ninguno puede saber cuáles son válidos en tu mundo.

En la práctica: si aquí aparece un esquema que no esperabas, has encontrado tu errata. Y significa además que una comprobación del tipo «¿se puede analizar?» no es una comprobación de que la dirección apunte a la web; para eso hay que contrastar el esquema con una lista explícita.

Credenciales dentro de la dirección

La forma `https://usuario:contraseña@host/` sigue existiendo, y aparece en scripts antiguos, en cadenas de conexión a bases de datos y en ejemplos de documentación. Los navegadores han restringido su uso porque era ideal para el phishing, pero las bibliotecas y las herramientas de línea de comandos la siguen aceptando.

Aquí se muestra el nombre de usuario y no la contraseña: en su lugar aparece una indicación de que hay una. El motivo es banal y cuenta igual — estos resultados acaban con frecuencia en una captura de pantalla o en un ticket, y una contraseña que ya se tiene no necesita imprimirse otra vez.

Los nombres internacionalizados se reescriben

Un host con eñe o con tilde se convierte a Punycode: `español.example` se vuelve `xn--espaol-zwa.example`. Esa es la forma que existe de verdad en el DNS, porque el sistema de nombres solo conoce ASCII; la escritura legible es una ayuda visual del navegador.

Hacer visible lo que realmente se consulta tiene utilidad de seguridad. Los ataques homográficos usan caracteres de otras escrituras que se parecen a los latinos; en la forma Punycode saltan a la vista, porque en lugar de un nombre familiar aparece una sopa de letras.

Analizar URL: preguntas frecuentes

¿Se visita la dirección?

No. Se descompone, no se abre: no hay petición al host, ni vista previa, ni resolución de redirecciones. Con una URL sospechosa o de un solo uso, eso es justamente lo importante.

¿Por qué el host no es el que esperaba?

Probablemente hay una arroba en la dirección: en https://[email protected]/ todo lo anterior son credenciales y el host es malicioso.example. Es conforme a la norma y es la base de una técnica de phishing muy antigua.

¿Por qué desaparece mi puerto 443?

Porque es el estándar de https y la normalización lo omite. https://ejemplo.com:443/ y https://ejemplo.com/ son la misma dirección — un motivo frecuente de que una comparación de textos entre dos URL falle.

¿Por qué no se marca htp:// como error?

Porque la especificación admite cualquier esquema — mailto, tel, git+ssh y cientos más. htp es por tanto un esquema sintácticamente válido. Que aparezca ahí es la pista de tu errata.

¿Se muestra mi contraseña si la URL lleva una?

No. Aparece el nombre de usuario y, de la contraseña, solo la indicación de que existe. Estos resultados acaban a menudo en capturas y en tickets, y ahí no pinta nada.

Otras herramientas