Burn-Link ·

Why URL hash fragments never reach the server

When a browser sends an HTTP request, text after # stays local. Burn-Link appends the decryption key after # in s.html?id={id}#{key}: the server only receives a ciphertext id, not the key. The read page is public to the recipient — no sign-up. Below: that boundary, with steps you can verify in the Network panel.

Fragments stay off the request Verify in DevTools No sign-up
00 / Contents

First, which layer you are checking

This article only answers why # does not enter server logs. It is not a how-to for Burn-Link, and it is not the overview on Security of whether plaintext leaves the browser.

01 / Role

What sits after #

A secret in the address bar does not mean the server log has a copy. That guess is roughly true for query parameters. It is not true for fragments.

When ops paste a temporary password into chat, or support forwards an admin URL with a token, the real fear is rarely “the other person can see it.” It is that every hop may keep a full copy of the link. Many people therefore assume: if a secret appears in the address bar, the server log must have a copy.

A full address splits into three parts. Scheme and host decide whom the browser talks to. Path and query parameters decide which resource, and those two appear on the HTTP request line. Characters after the hash are the fragment. They originally told the browser to scroll to an anchor; later, front-end scripts also read them with location.hash on the device. The server neither receives that string nor should use it for routing or auth.

Putting a key after # does not invent a new cipher. It uses a sending boundary browsers have long followed: one link can carry an id for the server and a key that stays in the current tab. UsePwd Burn-Link uses that boundary. Create and read both work on open; neither side registers. The server only stores ciphertext. Plaintext and the key are not sent as request bodies by default.

02 / The request

Which part is actually sent

Look at s.html?id=abc123#the-key. The browser’s GET usually has only the path and id on the request line. #the-key is not in the request, so there is nothing for a log to record.

This is how the URL standard has long worked. It is not a private convention of one site, and it is not “the server promised not to look.” “Can the server see it” here means: after TLS terminates, can the origin or a reverse proxy you control read that field from this HTTP request. It does not cover a compromised device, an extension that can read the page, or someone saving a screenshot.

Query parameters
?id=abc123&key=secret

The full string appears on the request line. Typical access logs usually keep the complete URL.

URL fragment
#secret

The browser does not treat it as part of the request. Typical access logs have nothing to record.

Request body
ciphertext

What Burn-Link actually uploads on create. At UsePwd that is only ciphertext, a TTL in hours, and a read count.

A common mistake: “HTTPS means the logs cannot see it.” Transport encryption stops a path eavesdropper from reading plaintext. After TLS terminates, the origin and a reverse proxy you control can still see the full request line. HTTPS does not erase ?key= from access logs. A fragment stays out of logs because it was never sent, not because the path is encrypted.

Another easy-to-miss channel is Referer. By default, some navigations send the previous page’s URL to the next host. Modern browsers usually strip the fragment on HTTPS-to-HTTPS jumps; query parameters can still appear in Referer. That is one reason a one-time key belongs after #, not in ?key=: you cannot make every downstream site promise not to log the referrer.

Boundary

A fragment staying off HTTP does not mean “the link cannot be copied.” The full address-bar string, including the key after #, still appears in local history, share previews, and messages you send yourself. This article only explains the server-log layer. It does not treat the fragment as an all-purpose safe.

03 / Check

Open the Network panel and you can see it

The goal is not to prove “nobody in the world can see it.” It is to prove that this HTTP request to UsePwd does not contain the key after #.

  1. 01
    Open the Burn-Link create page

    Go to Burn-Link. The page works immediately — no sign-up—no sign-in. Enter sample text you will recognize, and do not use a real production key.

  2. 02
    Open the Network panel and clear it

    Press F12 or right-click Inspect, then open Network. Clear existing requests if needed so they are not mixed with the first page load.

  3. 03
    Create a link

    After you submit, the browser encrypts with AES-256-GCM in the current tab, then POSTs to /api/secrets. Fields are ciphertext, ttl_hours, and max_reads. The share URL looks like s.html?id={id}#{key}.

  4. 04
    Inspect the create request

    Open that POST. The request URL should not include the key after #; the body should be ciphertext and two numbers, not the sample text you just typed.

  5. 05
    Open the read page and check the GET

    Open the same link on the read page. Later GET or status calls only have id in the path. Compare the string after # in the address bar with the request URL in the Network panel: the former stays local; the latter does not include it.

Production may also send analytics to /tj/. The payload is a page and button name, such as “Create link”—not plaintext, not the key, and not file contents. Local previews do not send analytics. If you only care whether the key entered HTTP, filter to /api/secrets and do not mistake analytics for a ciphertext channel.

These steps complement “does plaintext leave the browser” on Security: that page covers the scope of local computation; this article splits the URL and explains why logs have no # segment. Neither page replaces the form on the create page.

04 / How it is used

The id goes in the query; the key goes in the fragment. The server knows there is ciphertext, how many reads remain, and when it expires. It does not know how to unlock it.

On create, the current tab uses Web Crypto to generate a random key, encrypts the text with AES-256-GCM, and sends ciphertext to the server. The returned id goes in ?id=; the key is appended only after #.

The read page is public to the recipient. When they open s.html?id={id}#{key}, the browser fetches ciphertext or status with id, then decrypts with the fragment key kept locally. After the create-time read limit, the server deletes the ciphertext and the link cannot be read again. The recipient also does not register. The read page is a temporary ciphertext view, not a site index entry; for product capability, return to the create page or the check steps in this article.

A fragment key solves the “server logs and request line” layer. It does not solve “whom you sent the full link to.” Chat apps, email, and ticket systems keep the whole address you paste. Anyone with the full link has both the id and the key. Burn-Link limits ciphertext lifetime and read count on the server. It does not stop a recipient from taking a screenshot or forwarding.

How this differs from a query-parameter scheme

Some one-time links put decrypt material in ?k=. That is simple, but every open writes the key onto the request line, so CDN, WAF, and origin access logs can keep a copy. A fragment adds a hash and, in return, even a host that logs the full URL is missing the half that unlocks the ciphertext. The cost is that you must tell the recipient to copy the complete link, not only the part before the hash; without # and after, the read page can fetch ciphertext and cannot unlock it locally.

That is also why this article does not describe Burn-Link as a “password manager” or a recoverable safe. UsePwd has no accounts, no vault, and cannot recover a secret by user. If the link is lost, the fragment is truncated, or the read count is used up, the server cannot restore plaintext for you. Identity is explained on About.

Do not invert this

Do not read a fragment key as “only a trusted server can decrypt.” The opposite is true: the server does not have this key and cannot decrypt for you. Any browser tab that opens the full link can decrypt. The trust boundary is “who has the full address,” not “which server is more trustworthy.”

05 / Limits

What a fragment cannot stop

Reading “not in server logs” as “absolutely safe” skips several boundaries you can also check. List them first, so a mechanics article is not treated as a guarantee.

Local history and previews 01 The browser may store the full address. Preview bots usually request only the URL before #, but a message you send to a person still includes the full key.
What you paste yourself 02 Tickets, screenshots, and a conference-room projector take the fragment with them. That is a different issue from Referer.
A compromised device 03 If an extension can read the current page, no web tool can promise safety. The Network panel also cannot prove this layer.
Read limits only bind ciphertext 04 After the other person decrypts, plaintext is already in their tab. Burning deletes ciphertext on the server, not a clipboard copy.

Burn-Link fits a one-time handoff you trust the channel for, and that should stop after reading: a temporary password, a one-time API key, a short-lived code. It is not a long-term safe, and it is not a substitute for handing over a high-value master key in person.

File backup is a different path. Local encryption of a single file up to 5 GB goes through File Encryption Box: AES-256-GCM in the current tab, .lock / .enc output, and the file is not uploaded by default. That is “keep a ciphertext file yourself,” not “stuff a key into a URL.” Do not treat the two tools as the same guarantee.

06 / Choice

How to choose a channel

You must hand a short secret to someone else, and you do not want host access logs to keep material that can unlock it. Decide in the order below, instead of asking which site’s slogan is louder.

If the secret only needs a limited number of reads and both sides can open a browser, use Burn-Link: plaintext is encrypted locally, the id goes in ?id=, the key goes after #, and it works immediately — no sign-up. After create, compare once in the Network panel: the POST body is ciphertext, and the GET URL has no fragment. If you actually need long-term storage, multi-device sync, or recovery, that is outside this site—use a dedicated password manager, and do not treat UsePwd as an account system.

If the secret should never enter a third-party page, do not create a link: say it in person, use offline media, or stay inside an end-to-end channel you already have. A fragment scheme reduces “keys in server logs,” not “everyone who can see a screen.” Separating those layers keeps a URL-mechanics article from being read as a product warranty.

Whether the password itself is strong is a different question. Generate a 6–128 character random secret in the Password Generator; to check strength locally against the public leaked-password list shipped with the page, use Password Audit. The audit is not a web-wide lookup, and the password is not uploaded. Before you send a link or ticket text, use Privacy Cleanup to strip trackers or redact. Those pages, like this article, work immediately — no sign-up. The top bar only has a language switch.

07 / Next

When you finish, check it on the spot

The article answers why logs have no segment after #. To create a burnable encrypted link, open Burn-Link—no sign-up.