Por qué el fragmento # de una URL no aparece en los registros del servidor
Cuando el navegador envía una petición HTTP, lo que va después de # se queda en local. El enlace de un solo uso coloca la clave de descifrado en s.html?id={id}#{key}, después de #: el servidor solo recibe el identificador del texto cifrado, no la clave. La página de lectura es pública, sin registro. A continuación se desglosa ese límite, con pasos que puedes comprobar en el acto.
Qué papel tiene lo que sigue a #
Que un secreto aparezca en la barra de direcciones no implica que los registros del servidor tengan una copia. Ese razonamiento vale más o menos para los parámetros de consulta. No vale para el fragmento.
Cuando operaciones pega una contraseña temporal en un chat, o atención reenvía una URL de administración con un token, lo que más asusta suele no ser «que el otro lo vea», sino que cada salto intermedio pueda guardar una copia completa del enlace. De ahí que mucha gente dé por hecho: si el secreto está en la barra de direcciones, los registros del servidor tienen una copia.
Una dirección completa se parte en tres. El protocolo y el host deciden con quién habla el navegador; la ruta y los parámetros de consulta tras el interrogante deciden qué recurso, y esos dos bloques aparecen en la línea de petición HTTP. Los caracteres después de la almohadilla se llaman fragment. En español suele decirse fragmento. Al principio servían para que el navegador bajara hasta un ancla; más tarde, los scripts del cliente también leen ese texto en el dispositivo con location.hash. El servidor no lo recibe y no debería usarlo para enrutar ni autenticar.
Poner la clave después de # no inventa otro algoritmo de cifrado. Aprovecha un límite de envío que los navegadores respetan desde hace tiempo: un mismo enlace puede llevar «un identificador para el servidor» y «una clave solo para la pestaña actual». UsePwd Burn-Link usa precisamente ese límite. La página de creación y la de lectura: ábrelo y úsalo, sin registro en ninguno de los dos lados. El servidor solo guarda texto cifrado; el texto en claro y la clave no salen en el cuerpo de la petición por defecto.
Qué tramo se envía de verdad
Mira s.html?id=abc123#the-key. El GET del navegador suele llevar en la línea de petición solo la ruta y id. #the-key no está en la petición, así que los registros no tienen nada que anotar.
Así funciona la norma de URL desde hace tiempo. No es un convenio privado de un sitio, ni «el servidor prometió no mirar». En la tabla, «¿puede verlo el servidor?» significa: tras la terminación TLS, ¿puede el origen o un proxy inverso que controles leer ese campo en esta petición HTTP? No cubre un dispositivo comprometido, una extensión que lea la página ni que alguien guarde una captura.
?id=abc123&key=secret
La cadena entera aparece en la línea de petición. Los registros de acceso habituales suelen guardar la URL completa.
#secret
El navegador no lo trata como parte de la petición. Los registros de acceso habituales no tienen este tramo que anotar.
ciphertext
Lo que de verdad se envía al crear un Burn-Link. En UsePwd: solo texto cifrado, horas de validez y número de lecturas.
Un error frecuente: «ya hay HTTPS, los registros no lo ven». El cifrado de transporte evita que un intermediario en la línea lea el texto en claro. Tras la terminación TLS, el origen y un proxy inverso que controles siguen viendo la línea de petición completa. HTTPS no borra ?key= de los registros de acceso. El fragmento no entra en los registros porque no se ha enviado, no porque la línea vaya cifrada.
Otro canal fácil de olvidar es Referer. Por defecto, algunos saltos llevan la URL de la página de origen a la siguiente. En saltos entre HTTPS, los navegadores modernos suelen quitar el fragmento; los parámetros de consulta aún pueden aparecer en Referer. Por eso una clave de un solo uso encaja mejor después de # que en ?key=: no puedes exigir a cada sitio de destino que prometa no registrar la dirección de origen.
Que el fragmento no entre en HTTP no significa «el enlace no se puede copiar». La cadena completa de la barra de direcciones, incluida la clave después de #, sigue apareciendo en el historial local, las vistas previas al compartir y los mensajes que envías tú. Este artículo solo explica la capa de los registros del servidor. No presenta el fragmento como una caja fuerte universal.
Abre el panel Network y lo ves
El objetivo no es demostrar que «nadie en el mundo lo ve», sino que esta petición HTTP a UsePwd no contiene la clave que va después de #.
-
01
Abre la página de creación de Burn-Link
Entra en Burn-Link. La página: ábrela y úsala, sin iniciar sesión. Escribe un texto de ejemplo que reconozcas, sin usar una clave real de producción.
-
02
Abre el panel Network y vacía el historial
Pulsa F12 o clic derecho e Inspeccionar, y pasa a Network. Si hace falta, vacía las peticiones ya registradas para no mezclarlas con la primera carga de la página.
-
03
Crea un enlace
Al enviar, el navegador cifra primero con AES-256-GCM en la pestaña actual y luego pide a
/api/secrets. Los campos sonciphertext,ttl_hoursymax_reads. La dirección para compartir tiene la formas.html?id={id}#{key}. -
04
Revisa la petición de creación
Abre ese POST. En la URL de la petición no debe aparecer la clave que va después de
#; en el cuerpo deben estar el texto cifrado y dos números, no el texto de ejemplo que acabas de escribir. -
05
Abre la página de lectura y comprueba el GET
Abre el mismo enlace en la página de lectura. Los GET o consultas de estado posteriores solo tienen
iden la ruta. Compara la cadena que sigue a#en la barra de direcciones con la URL de la petición en el panel Network: la primera se queda en local; la segunda no lleva ese tramo.
En producción también puede haber analytics hacia /tj/. La carga es el nombre de página y de botón, por ejemplo «Crear enlace»: no es texto en claro, no es la clave ni el contenido de un archivo. Las vistas previas locales no envían analytics. Si solo te importa si la clave ha entrado en HTTP, filtra primero /api/secrets; no tomes una petición de analytics por un canal de texto cifrado.
Estos pasos complementan «¿sale el texto en claro del navegador?» en seguridad: esa página cubre el alcance del cálculo local; este artículo parte la URL y explica por qué los registros no tienen el tramo de #. Ninguna de las dos sustituye el formulario de la página de creación.
Cómo aprovecha Burn-Link este límite
El identificador va en los parámetros de consulta; la clave, en el fragmento. El servidor sabe que hay un texto cifrado, cuántas lecturas quedan y cuándo caduca. No sabe con qué abrirlo.
Al crear, la pestaña actual usa Web Crypto para generar una clave aleatoria, cifra el texto con AES-256-GCM y entrega el texto cifrado al servidor. El identificador que vuelve va en ?id=; la clave solo se añade después de #.
La página de lectura es pública para quien la recibe. Al abrir s.html?id={id}#{key}, el navegador pide primero el texto cifrado o el estado al servidor con id y luego descifra con la clave del fragmento guardada en local. Al alcanzar el número de lecturas fijado al crear, el servidor borra el texto cifrado y el enlace ya no se puede leer. Quien recibe tampoco tiene que registrarse. La página de lectura es un contexto temporal de texto cifrado, no una entrada de indexación del sitio; para entender el producto, vuelve a la página de creación o a los pasos de comprobación de este artículo.
Poner la clave en el fragmento resuelve la capa de «registros del servidor y línea de petición». No resuelve «a quién enviaste el enlace completo». Chats, correo y sistemas de tickets guardan la dirección entera que pegas. Quien tenga el enlace completo tiene el identificador y la clave. Burn-Link limita la vida del texto cifrado en el servidor y el número de lecturas, no si quien lo recibe hace una captura o lo reenvía.
En qué se diferencia de un esquema con parámetros de consulta
Algunos enlaces de un solo uso ponen el material de descifrado en ?k=. Es sencillo, pero cada apertura escribe la clave en la línea de petición: CDN, WAF y los registros de acceso del origen pueden guardar una copia. El esquema de fragmento añade una almohadilla y, a cambio, aunque el alojamiento registre la URL completa, le falta la mitad que abre el texto cifrado. El coste: tienes que recordar a quien lo reciba que copie el enlace entero, no solo lo que va antes del interrogante; sin lo que sigue a #, la página de lectura puede obtener el texto cifrado y no puede abrirlo en el dispositivo.
Por eso este artículo no presenta Burn-Link como un «gestor de contraseñas» ni como una caja fuerte recuperable. UsePwd no tiene cuentas, no tiene almacén de contraseñas y no puede recuperar un secreto por usuario. Si se pierde el enlace, se trunca el fragmento o se agotan las lecturas, el servidor no puede restaurar el texto en claro por ti. La identidad se explica en Acerca de.
No interpretes la clave del fragmento como «solo un servidor de confianza puede descifrar». Es al contrario: el servidor no tiene esa clave y no puede descifrar por ti. Cualquier pestaña que abra el enlace completo puede descifrar. El límite de confianza es «quién tiene la dirección entera», no «qué servidor es más fiable».
Lo que un fragmento no impide
Leer «no entra en los registros del servidor» como «totalmente seguro» deja fuera varios límites que también se pueden comprobar. Los enumeramos primero, para que un artículo de principios no se tome por una garantía.
#, pero el mensaje que envías a una persona sigue llevando la clave entera.
Burn-Link encaja en una entrega de un solo uso en la que confías en el canal y que termina al leer: contraseña temporal, API Key de un solo uso, código de corta duración. No sirve como caja fuerte a largo plazo ni sustituye entregar en persona una clave maestra de alto valor.
La copia de un archivo es otro camino. El cifrado local de un solo archivo de hasta 5 GB va por la caja de cifrado: AES-256-GCM en la pestaña actual, salida .lock / .enc, archivo no enviado por defecto. Es «guardar tú un archivo de texto cifrado», no «meter una clave en una URL». No mezcles las dos herramientas en la misma garantía.
Cómo elegir el canal
Tienes que entregar un secreto corto a otra persona y no quieres que los registros de acceso del alojamiento guarden con qué abrirlo. Decide en el orden de abajo, no preguntando qué eslogan suena más alto.
Si el secreto solo necesita un número limitado de lecturas y ambos podéis abrir un navegador, usa Burn-Link: el texto en claro se cifra en este dispositivo, el identificador va en ?id=, la clave después de #, ábrelo y úsalo. Tras crearlo, compáralo una vez en el panel Network: el cuerpo del POST es texto cifrado y la URL del GET no tiene fragmento. Si lo que necesitas es guardarlo a largo plazo, sincronizar varios dispositivos o recuperarlo, eso ya queda fuera de este sitio: usa un gestor de contraseñas específico y no tomes UsePwd por un sistema de cuentas.
Si el secreto no debería entrar en ninguna página de terceros, no generes un enlace: dilo en persona, usa un soporte sin conexión o quédate en un canal de extremo a extremo que ya tengáis. El esquema de fragmento reduce «claves en los registros del servidor», no «todo el que pueda ver una pantalla». Distinguir esas dos capas evita leer un artículo sobre el funcionamiento de las URL como una garantía de producto.
Que la contraseña sea fuerte es otra cuestión. Genera un secreto aleatorio de 6 a 128 caracteres en el generador de contraseñas; para ver la fuerza en este dispositivo y contrastar la lista pública de contraseñas débiles filtradas que llega con la página, usa la detección de contraseñas. No es una búsqueda de filtraciones en toda la web; el secreto a probar no se envía. Antes de enviar un enlace o el cuerpo de un ticket, usa la limpieza de privacidad para quitar parámetros de seguimiento o redactar. Esas páginas, como este artículo: ábrelo y úsalo. A la derecha de la barra superior solo está el selector de idioma.
Al terminar, compruébalo en el acto
El artículo responde por qué los registros no tienen el tramo que sigue a #. Para crear un enlace cifrado que se destruye, abre Burn-Link, sin registrarte.