Free · No Signup

Can a Browser Extension See the Image You're Redacting?

Every other page on this site assumes the threat is a person watching, a device someone else uses later, or software recording in parallel. This one is about code already running inside your own browser tab.

🔒 No upload · Runs in your browser · Instant download

Every page on this site about who else might see this image besides you has picked from a short list of adversaries: a person watching your screen live during a call, the next person who sits down at a computer you borrowed, separate monitoring or recording software running on the same machine, or a remote AI model you deliberately pasted an image into. All four of those assume the threat is a person, a different device, or a system you knowingly handed the file to. None of them is a piece of code already running inside the exact browser tab you're using to redact the image right now.

A browser extension that has been granted permission to read and change data on the sites you visit, which Chrome phrases in its own settings as letting the extension “read and change all your data on the websites you visit,” can inject what's called a content script into any matching page, including this one. A content script gets the same access to a page's DOM that the page's own JavaScript has. That isn't a flaw in this editor specifically; it's how extensions are designed to work, and it's the mechanism behind ad blockers, password managers, coupon finders, grammar checkers, and plenty of other ordinary tools people install for reasons that have nothing to do with image editing.

What that means here is specific and checkable against this page's own code, not a hypothetical: this editor keeps your image in a <canvas> element, read with getImageData() and toDataURL() calls that this script already uses on itself. A content script with access to this domain can call those same functions on that same canvas, which means it can see the original image the moment it's drawn, before you've placed a single redaction box, not only whatever you eventually choose to download.

Mode
Shape

Drop your image here

Or click to browse · Paste with Ctrl+V also works

PNG · JPG · WebP · GIF
How It Works
1

Open

Drop your image in or paste from clipboard.

2

Pick Mode

Black Box, Blur, or Pixelate.

3

Select Areas

Rectangle, oval, or freehand lasso — then hide what you selected.

4

Download

Hit Download PNG. Done.

SquooshNeed to shrink your image after editing? Squoosh is a free browser-based image compressor with no upload required.

Visit Squoosh →
Guide

One fact carries this page: a browser extension with permission to read your browsing data has the same access to this editor's canvas that this editor's own code has, and that access exists the moment your image loads, not just when you download the result.

Four existing threats, and the one none of them cover

This site already has pages about a live viewer during a screen share, about the next person to use a borrowed or shared computer, about separate time-tracking or remote-support software that captures its own screenshots on its own schedule, and about pasting a screenshot into an AI chat assistant. Lined up, those four cover a person watching in real time, a different device used later, a separate automated capture pipeline, and a destination you deliberately chose to send a file to. They're genuinely different mechanisms from each other, which is why each got its own page, but they share one assumption: the threat is external to the tab you're sitting in right now.

A browser extension breaks that assumption. It doesn't need to be watching live, it doesn't need later physical access to your device, it isn't a separate screenshot pipeline running in parallel, and you didn't choose to send it anything. If it's installed, enabled, and holds the right permission, it has standing, silent access to this exact page for as long as the extension exists, independent of anything this editor's own code does or doesn't do.

What a browser extension can actually reach

Extensions reach pages through what both Chrome's and Firefox's own documentation call a content script: a script the extension injects into a matching web page. Chrome's developer documentation describes content scripts as code that lives in the context of the page and is able to read details of the pages the browser visits and make changes to them; Firefox's documentation for the same mechanism says a content script can read and modify page content using the standard Document Object Model, and that it can access and modify the page's DOM just like normal page scripts can. Both descriptions agree on the substance: a content script is not a sandboxed observer limited to a few safe details. It has the same DOM access this page's own script has.

That access is gated by permission, not automatic for every extension on every page. An extension needs host permission for a site, requested either up front in its manifest or granted at install or use time, before its content scripts run there. The specific wording Chrome shows for the broadest version of that permission is letting an extension read and change all your data on the websites you visit, and it's a permission a large number of ordinary, non-malicious extensions request, because it's the easiest way to guarantee the extension keeps working if the user visits a new site the developer didn't anticipate.

Why this editor's canvas has nothing blocking that read

Browsers do have a real protection here, called canvas tainting, and it's worth being precise about what it actually covers. If a page draws an image from a different origin onto a canvas without that image's server granting cross-origin permission, the browser marks the canvas tainted and blocks the page's own script from reading its pixel data back out with getImageData() or toDataURL(). That protection exists to stop one website from quietly reading pixels out of an image hosted by another website.

It doesn't apply here, and not because of any oversight. This editor loads your image through a FileReader that reads the local file directly into a data URL, then draws that into an Image object with no cross-origin fetch involved anywhere; the resulting canvas is same-origin by construction, never tainted, which is exactly why this script's own getImageData() and toDataURL() calls, used for every undo snapshot and for the final download, run with no error handling around them at all in the page's source. A content script sitting in the same page context inherits that same unrestricted access, because canvas tainting was never designed to separate a page's own script from an extension's. It was designed to separate one website's script from another website's images.

The permission most people already granted, without thinking about this page

None of this requires a malicious extension dressed up as something innocent, though that category exists too. An extension can be entirely legitimate when you install it and still hold broad host access: a password manager that needs to recognize login forms on every site, a grammar checker that needs to read every text field you type into, an ad blocker that needs to inspect every page's content to find ads, or, with a particular irony here, another screenshot or annotation tool competing for the same task this page performs. Any of these plausibly already has the one permission that matters, granted weeks or months ago for a completely unrelated reason, with nothing in this editor's interface able to show you that it's there.

It's also worth separating installed-and-trustworthy from installed-and-currently-trustworthy. Extensions update automatically in most browsers, and an extension's ownership or behavior can change after the fact, through a sale, a compromised developer account, or a supply-chain incident, without most users ever noticing that anything changed. A permission granted once tends to stay granted indefinitely.

What you can actually check and do

Open your browser's extensions page: chrome://extensions in Chrome-based browsers, about:addons in Firefox, edge://extensions in Edge. For each installed extension, look at its site access setting. Chrome shows this as a choice between letting an extension run on click only, on specific sites, or on all sites; narrowing an extension to on click, so it only gets page access the moment you deliberately activate it, closes this gap for that extension without necessarily breaking what you use it for day to day.

For a genuinely sensitive redaction session, the more reliable option is a separate browser profile with no extensions installed at all, since extensions are scoped per profile in every major browser. A private or incognito window helps, but only partially: most browsers disable extensions by default inside one unless you've specifically turned on incognito access for that extension, and a meaningful number of people do turn that on, often for exactly the extensions, like password managers, that carry the broadest access, which quietly reopens the same exposure inside the window that's supposed to be more private.

Common mistakes and misconceptions

“Incognito mode protects me from this.” It protects against local leftovers like history and cache, and it disables extensions by default, but only the ones you haven't already explicitly allowed to run in incognito. Checking that list, rather than assuming incognito is extension-free, is the only way to know for a particular browser.

“I didn't click allow on anything today, so nothing can read this.” The relevant grant usually isn't from today. It's a standing permission from whenever you installed an extension that happened to request broad site access, which keeps applying to every new page you open, including this one, with no further prompt.

“This only matters for the file I download.” It doesn't. The risk window opens the moment the untouched original lands on the canvas, which is before you've drawn anything at all, earlier than any other leak discussed elsewhere on this site.

“This means the tool has a backdoor or is somehow compromised.” No. This editor's script makes no network requests of any kind, by design, and sends your image nowhere. The access described here comes entirely from the browser's own extension permission model granting a separate piece of installed code a privileged read of the page, a mechanism that exists independently of whether this particular tool's code is trustworthy, and would apply just as much to almost any other canvas-based image editor running in the same browser.

The Access Is Already There, Not Something You'd Have to Grant Today

An extension granted permission to read and change all your data on the websites you visit can run a content script on this page with the same DOM access this editor's own script has, including the canvas your image is drawn into. Because this editor loads images locally through FileReader rather than fetching them cross-origin, the canvas is never tainted, so the usual browser protection against one site reading another site's image pixels simply doesn't apply between this page and an extension that already has host access to it.

That access typically wasn't granted today. It's a standing permission from whenever you installed a password manager, ad blocker, grammar checker, or similar tool, for reasons that had nothing to do with image redaction, and it covers the original image the instant it loads onto the canvas, earlier than any other leak point discussed on this site.

The practical response isn't to distrust this editor, which makes no network calls of any kind; it's to check your browser's extensions page, narrow unnecessary extensions away from all-sites access, and consider a clean, extension-free profile for anything genuinely sensitive.

Frequently asked questions

Can a browser extension actually see the image while I'm redacting it?

Yes, if that extension has been granted permission to read and change data on the sites you visit, including this one. That permission lets it run a content script here with the same access to the page's DOM that this editor's own script has, which includes the canvas element the image is drawn into. A content script can call the exact same getImageData() or toDataURL() functions this page already calls on itself, and nothing in the browser blocks that for a same-origin canvas like this one. It could read the image the moment it loads, before you have drawn a single redaction box.

Does this mean HideShot itself is insecure or has a backdoor?

No. This editor's own script has no network calls of any kind (no fetch, no XMLHttpRequest, no WebSocket), reads the file only from your device, and sends nothing anywhere. The exposure described here doesn't come from this tool's code at all; it comes from the browser's extension permission model, which lets separately installed third-party code read the DOM of any page it has been granted access to. That is true of this page and would be equally true of almost any other canvas-based editor running in the same browser, since none of them can see or block another extension's content scripts.

Does using a private or incognito window protect me from this?

Partially, and only if you haven't already opted out of that protection. Major browsers generally disable extensions inside a private or incognito window by default unless you've specifically turned on incognito access for that extension. The catch is that plenty of people do turn this on, often for exactly the extensions, like password managers, with the broadest access, which quietly reopens the same exposure inside the private window. Check your own browser's extension settings rather than assuming incognito mode is extension-free.

How do I check whether an installed extension has this kind of access?

Open your browser's extensions page (chrome://extensions in Chrome-based browsers, about:addons in Firefox, edge://extensions in Edge) and look at each extension's site access setting. Chrome phrases the broadest option as letting the extension read and change all your data on the websites you visit; Firefox and Edge use similar wording. An extension set to that broadest option, or to a list that happens to include this domain, has standing access to a page like this one for as long as it's installed and enabled, whether or not you're thinking about it in the moment.