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.
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.