Two architectures live under the same 'password protected' label. One is a real gate; the other is a UI prompt the receiver can click past in 30 seconds with DevTools open.
You share a private link with a client. The page asks for a password before showing the content. The client enters it, the content loads. Looks the same from the receiver's side either way — but underneath, two completely different things might be happening.
For most use cases the difference doesn't matter. For anything where the password is doing real protective work — NDA documents, pre-launch material, client deliverables with sensitive financials — it matters a lot.
The page loads. All of it. The HTML, the CSS, the JavaScript, the content. The browser receives the entire file. Then JavaScript on the page runs, sees there's no valid "unlock" token in browser storage, and renders a password prompt covering the content.
When the receiver enters the password, the JavaScript either:
The receiver sees a password prompt. They might assume the content is hidden. The content is sitting in the browser, downloaded, available via View Source or DevTools, the moment the page first loaded.
What the receiver can do without ever entering the password:
For encrypted content, the bar is slightly higher — the receiver would need to crack the encryption, which is much harder. But weak passwords + browser-side decryption + open code is a tractable problem for someone who actually wants the content.
The page request hits the server. The server checks for a valid "unlock" cookie or token. If there isn't one, the server returns only a password prompt page — the actual content is not in that response.
The receiver enters the password. The browser sends the password to the server. The server checks it. If valid, the server issues an unlock cookie/token and serves the content. If invalid, the server returns the prompt again with an error.
The content never reaches the browser until the password is correct. View Source on the prompt page shows only the prompt; DevTools Network shows only the prompt payload. There's no client-side trick because there's nothing client-side to trick.
This is what "password protection" usually implies, but it's not what every host implements.
A 30-second check:
Most reputable private-link hosts use server-side. Some HTML password-protection tools, browser extensions, and "share with password" plugins use client-side. Worth knowing which one you're trusting before assuming the protection is what you wanted.
The realistic threats it stops:
These are the actual common cases. Password protection is a layer in defense-in-depth, not a standalone fortress.
Test the host's password behavior before trusting it with sensitive material — drop a non-sensitive file, enable password, open in incognito + DevTools, confirm the content isn't in the first response. Free, no card, 7-day self-destruct.
Worth being explicit:
For most realistic threats — accidental forwarding, link sharing by mistake, casual curiosity — server-side password is enough. For state-actor-level threats, no consumer file-sharing tool is the right shape.
The cases where the upside reliably outweighs the friction:
For the case where the receiver is the only stakeholder and forwarding is fine — internal review, public-by-default work, anything the receiver is expected to share — password is friction without payoff.
The implementation detail that matters most: send the password through a different channel than the link.
Same email containing both link and password defeats the point — the leak vector for the link is the same vector for the password.
Password protection ships free on most private-link hosts that implement it server-side. Other complementary layers stack on top — searchable opt-in (free on every tier, with more headroom on paid), plus paid-tier polish like white-label expiry pages, custom domain, and permanent links — so password isn't the only thing standing between the file and a misforward.
Password protection on a private link isn't:
The right framing: password protection is one layer in defense-in-depth, sized for the realistic threats most private-delivery workflows actually face. For most use cases that's exactly right. For workflows that need more, the next layer is a different shape of system entirely.
Grok's share button makes a public link, and xAI says plainly it can be indexed by a search engine. On Grok Business the same button does close to the opposite. Here's what the person on the other end receives, and the page where you revoke it.
Sharing a chat creates a snapshot anyone with the link can open. Unsharing disables that link. Neither of those is the same as 'not indexable', and the difference caught a lot of careful people in July 2026. Here's the mechanism, where to check your own shares, and when you need noindex to be a property of the link itself.
Most expiry windows get set by guess — 7 days because that's the default, 'never' because that's reversible. The actual fit comes from matching the window to what the content references.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.