back to overview More blogs

Can Websites Read Your Clipboard? Test the Two Ways

You copied a password, switched to a website, and saw a request to read your clipboard. What would clicking Allow actually hand over? And if you never see a prompt, does that mean the page cannot read anything?

There are two routes in. Pasting into a page gives that page the data involved in the paste. A separate browser API can read the clipboard without a paste, subject to the browser’s access rules. Mixing those up produces both the reassuring wrong answer, “websites cannot read your clipboard,” and the alarming one, “every open tab sees your passwords.”

The short version: yes, a website can read what you paste into it. It can also request a direct clipboard read; Chrome can remember an access grant, while Firefox and Safari use different interaction and Paste-prompt rules. Merely opening a fresh site does not automatically disclose your clipboard. The demo below tests the two paths separately, using harmless sample text.

A paste is already a handover

Press Ctrl+V or Command+V in a text field and the browser fires a paste event. A listener can call event.clipboardData.getData('text/plain') before the text appears in the field. No extra clipboard permission dialog is needed for that user-initiated paste. You just told the browser where to put the data.

The event bubbles through the document, so the listener need not live on that particular field. A page can also cancel the default insertion. An empty box after you paste is not evidence that the page received nothing.

Try it here. Select and copy the sample, then paste into the empty box. The demo counts the text and lists the formats exposed by the event. It discards the pasted text instead of inserting it. Nothing from either test is uploaded or saved by this component.

Two ways data reaches a page

Use this harmless sample. Select and copy it yourself, then try each route below. Copying replaces your current clipboard contents.

bscan clipboard sample 123

You paste into the page

Waiting for your paste. No clipboard read requested.

The page requests a read

This button requests your current clipboard text. Copy only the sample before using it. Your browser may ask for permission or show a Paste menu.

Checking API availability…
A paste and a direct read use different access paths. This demo keeps only counts and format names in page memory, with no upload or storage. Clearing results does not clear your clipboard or reset browser permissions.

A spreadsheet cell or formatted paragraph may supply more than plain text. The clipboard can carry several representations of the same item, such as text/plain and text/html. A page can receive the formats the browser exposes for that paste, not just the characters you expected to see. Our demo lists the format names; it does not render pasted HTML or open pasted files.

Can a website read the clipboard without you pasting?

Yes, when the browser allows a direct read. navigator.clipboard.readText() asks for text from the current clipboard. read() can request supported non-text formats too. These methods belong to the Async Clipboard API, which is restricted to secure contexts such as HTTPS. A secure connection is a prerequisite, not blanket permission to collect your data.

Click the demo’s read button only after copying the harmless sample. This is an actual API request, so your browser may show its own permission or Paste UI. The page reports whether the request succeeded and the returned text length. It does not turn a refusal into a green “safe browser” badge: a refusal describes this request, with this focus state and these permissions.

The Clipboard specification distinguishes a real user paste from a script dispatching an event called paste. A script cannot manufacture a trusted paste event to unlock the system clipboard. That is why the first test needs your paste action and the second needs a browser-approved read.

Chrome can remember permission; Safari and Firefox differ

In Chromium browsers, including Chrome and Edge, a focused document can request clipboard-read permission. If it is already granted, an eligible read can succeed without another prompt. “I was not asked this time” does not prove that access was never granted. Check the site’s existing permissions.

Firefox and Safari do not implement that same persistent clipboard-read permission. Their direct-read path requires recent user interaction and can present a temporary Paste choice. Reading content copied from the same origin can suppress that prompt. This is why testing only text copied on the test page can give a misleading impression of what happens with text copied in another app.

For a second pass, type a harmless sentence into a local text editor, copy it there, return here, and request a read again. Compare the browser’s UI, not just the final number. MDN documents the browser differences; WebKit explains its clipboard access design. Embedded frames and browser policies can impose additional restrictions, so test in the browser you actually use.

Does a Copy button read what was there before?

It does not have to. A button using navigator.clipboard.writeText() writes the page’s text to the clipboard. That method does not first return the previous contents. Reading and writing are separate operations with different access rules, as Google’s Async Clipboard guide explains.

A page can also handle the copy event, choose what goes on the clipboard and cancel the default copy. The copy-event API does not give the handler the old clipboard contents. It can read the text selected in its own document, though. Copying a sentence from a page is an observable interaction, which our separate tab-switching and page-activity demo shows.

This also explains why a site’s Copy button is not a guarantee that the copied text matches the visible text. Check pasted commands before running them. The dangerous step is executing whatever arrived, not the existence of a Copy button.

Can websites see your clipboard history?

The ordinary web Clipboard API has no method for listing your operating system’s clipboard history. A permitted read concerns the current clipboard contents, not a searchable archive of everything you copied last week. Clipboard managers, browser extensions and native apps have their own access models; do not use a phone app’s behavior as proof of what a normal webpage can do.

That limit does not erase data already handed over. A site that received text can keep its own copy. Replacing the clipboard later, closing the tab or resetting permission cannot recall that copy. Likewise, the Clear results button above clears this demo’s display; it does not clear your system clipboard or revoke a browser permission.

Close the access route you actually opened

In desktop Chrome, open Settings, Privacy and security, Site settings, then find Clipboard. Review the allowed sites and remove access you no longer need. You can also open the current site’s controls beside the address bar and inspect its site settings. Google’s permission guide documents these controls. Blocking direct reads still does not prevent a page receiving a paste you deliberately send it.

For routine work, paste only into a destination you intend to receive the data. Use harmless samples when checking permissions. If the question is what a page learns without your interaction, compare this with font fingerprinting or the WebGL renderer readout: those are different collection surfaces, and a clipboard refusal says nothing about them.

If you manage client accounts in separate profiles, a tool such as Incogniton can organize that work. Still treat each paste as a deliberate transfer to the receiving page. Profile separation is no reason to paste a client’s secret into the wrong account.

Copy the sample, compare the two results, then review any permission you granted during the test. Use the full scan next to inspect the browser signals that do not depend on a paste.

Incogniton Logo

Level up your privacy

Arrow