← Chrome 150 reference

v150 · security · css · svg · iframes

Disable SVG filters on plugins and iFrames

Limited availability

  • Chrome · 150 (milestone listing: enabled by default)
  • Safari · shipped (engine behavior since 2017, WebKit changeset)
  • Firefox · under consideration (vendor position)
  • BCD · no dedicated subfeature (rolls up under the official svg-filters web-feature)

Behavioral security restriction, not a new API: Chrome 150 stops applying SVG reference filters to cross-origin or restricted iframes and to web plugins. WebKit has restricted SVG filters to accessible security origins since 2017; Mozilla's standards-position request is open with no position taken. No browser-compat-data entry exists for this specific behavior, so per-engine rows below cite vendor positions and WPT instead.

Chrome 150 prevents Scalable Vector Graphics (SVG) filters from being applied to embedded plugins (for example, PDFs) and cross-origin or restricted iFrames (for example, sandboxed ones). When a plugin or iFrame would be painted with an SVG filter effect, the effect tree is traversed to find the highest ancestor without SVG filters, and that effect is then applied instead. CSS filter functions such as blur() are not SVG reference filters and are unaffected.

at a glance

At a glance
Milestone listingChrome 150 — “Enabled by default” (the listing is authoritative for milestone + slug)
Feature detailDesktop 150, Android 150, WebView 150; detail status text “Proposed” (accurate_as_of 2026-06-01); all platforms using Blink
CategorySecurity — behavioral restriction; no new API surface, no developer flag, no origin trial; rolled out under the Finch control kPreventSvgFilterPaint (check chrome://variations on a given install)
EnterpriseFirst enterprise notification milestone 149
Specificationw3c/csswg-drafts PR #13846 — [filter-effects-1] Document Clickjacking Attacks (open, unmerged at review time; amends Filter Effects Module Level 1)
Tracking bugcrbug.com/476646486 (Blink>SVG)
TestsWPT svg/styling/svg-filter-render-*.tentative cross-browser reference tests
Shipping intentblink-dev intent thread (ship stage)
ChromeStatus5117170452398080 — Disable SVG filters on plugins and iFrames
Source: chromestatus.com/feature/5117170452398080; ChromeStatus API feature record

why it exists

SVG filter primitives such as feBlend, feColorMatrix, feComposite, and feGaussianBlur arbitrarily manipulate the pixels of the surface they are applied to. When a page applies such a filter to a cross-origin iframe or a plugin, it can visually manipulate content it has no script access to — potentially causing users to take actions they might not otherwise. The canonical write-up is the SVG clickjacking research by the independent security researcher who disclosed the attack (rebane2001) and whose work the ChromeStatus motivation cites: dynamic SVG filters disguise cross-origin content and manipulate users, and can exfiltrate data through user feedback or QR-code tricks.

A second, older motivation is timing: SVG filter rendering cost can be data-dependent, so filtering cross-origin pixels enables pixel-perfect timing attacks that reconstruct protected content one measurement at a time (the Black Hat USA 2013 pixel-perfect timing paper, cited in the ChromeStatus motivation). Note that direct pixel readback through feDisplacementMap-style tainted inputs was already a no-op before this change; this restriction targets visual manipulation and timing, not a new readback channel.

The proposed specification text is direct: user agents must not apply SVG reference filters to cross-origin/restricted iframes or web plugins because of their ability to arbitrarily manipulate pixels. It is added to Filter Effects Level 1 as a “Clickjacking Attacks” subsection and points at the HTML standard's guidance on writing secure applications.

Source: w3c/csswg-drafts PR #13846 (proposed normative text + review discussion); SVG clickjacking research (rebane2001); Pixel-perfect timing attacks (Black Hat USA 2013); chromestatus feature motivation

what changes

Scenario matrix
ScenarioBefore Chrome 150Chrome 150+
SVG reference filter on same-origin <iframe> (including same-origin srcdoc)Applied normallyApplied normally (unchanged)
SVG reference filter on cross-origin <iframe>Applied (frame pixels manipulable by embedder)SVG filter skipped; nearest non-SVG ancestor effect used
SVG reference filter on sandboxed <iframe> (even same-origin)AppliedSVG filter skipped
SVG reference filter on a web plugin (<embed>/<object>, e.g. the PDF viewer)AppliedSVG filter skipped
CSS filter functions (blur(), brightness()…) on any of the aboveApplied normallyApplied normally (unchanged — the restriction covers SVG reference filters only)
Non-SVG-filter effects (opacity, transform, backdrop-filter) around the frameApplied normallyApplied normally — but a backdrop-filter SVG reference on an element in front of the frame is a separate, unaddressed path (see caveats)
Source: chromestatus feature summary; WPT svg/styling reftests (each restricted-case test's reference renders the frame with no filter effect; the same-origin and srcdoc references render it filtered)

behavior reference

The developer-facing surface is a paint-time behavior of one CSS construct — filter: url(…) referencing an SVG <filter> element — on three kinds of replaced content, plus the fallback algorithm. Each item below covers syntax, inputs, outputs, errors, context/exposure, lifecycle, examples, compatibility, and security/privacy.

SVG reference filters on cross-origin or restricted iframes

Syntax. The restricted construct is the CSS filter property with a url() reference to an SVG <filter> element — e.g. filter: url(#my-svg-filter) — declared on a selector that matches an <iframe> whose document is cross-origin to the embedder, or that is restricted (a sandboxed frame, including a same-origin frame with a sandbox attribute). Shorthand and longhand forms are equivalent: filter: url(#f) blur(2px) has only its SVG-reference component skipped. CSS filter functions in the same declaration are not restricted.

Source: PR #13846 proposed text (“SVG reference filters”); WPT sandbox-frame test

Inputs. The behavior is keyed on three inputs, evaluated together: (1) the computed filter value of the iframe element — does it contain an SVG reference filter; (2) the origin relationship between the embedding document and the framed document — same-origin frames (including same-origin srcdoc frames) keep their filters, cross-origin frames lose them, and a frame that navigates from a same-origin srcdoc document to a cross-origin document loses the filter on navigation; (3) the frame's restricted status — a sandbox attribute makes even a same-origin frame restricted.

Source: WPT cross-origin-frame test; WPT cross-origin-navigation-in-srcdoc-frame test; WPT srcdoc-frame test (filter retained)

Outputs. Painted output only: the restricted frame renders as if the SVG reference filter were not declared — the WPT references for the cross-origin and sandbox cases render the iframe with no filter effect at all. Any non-SVG-filter ancestor effect is still applied via the fallback algorithm below. Effect on computed style is not defined in any cited source (explicit unknown): the skip is defined at paint time, which implies the declaration remains in the computed value, but this is not directly sourced and runtime verification on an enforcing build is pending.

Source: WPT cross-origin-frame reference (no filter, unfiltered iframe markup); chromestatus feature summary

Errors. None by design: no exception is thrown, no CSS parse error is produced, and the declaration remains valid — the filter is skipped silently at paint time. Neither the ChromeStatus record nor the proposed spec text defines a console message or other developer-facing signal; whether Chrome emits a devtools warning is not recorded in any cited source (explicit unknown — no stable public source).

Source: PR #13846 proposed text; ChromeStatus API feature record

Context / exposure. Applies in every Blink context that paints iframes: desktop Chrome 150, Android 150, and WebView 150 (“all platforms using blink”). It is a default-on behavioral change with no flag, no origin trial, and no permissions or capability detection surface; pages cannot opt a restricted frame back into SVG filtering.

Source: ChromeStatus API feature record (desktop/android/webview 150, all_platforms_descr)

Lifecycle / state transitions. The decision is re-evaluated as the frame's state changes, not latched at first paint: the WPT suite covers a same-origin frame that becomes restricted when a sandbox attribute is set and the frame reloads (filter lost after reload), and a srcdoc frame that is navigated cross-origin (filter lost on navigation). Nested frames compose — the suite includes cross-origin-in-cross-origin, cross-origin-in-same-origin, same-origin-in-cross-origin, and same-origin-in-same-origin cases.

Source: WPT reload-as-sandbox test; WPT svg/styling directory (nested-frame variants)

Examples.

/* SKIPPED in Chrome 150+ when #frame loads a cross-origin document
   or carries a sandbox attribute — the frame paints unfiltered. */
.restricted-frame {
  filter: url(#svg-filter);
}

/* Still applied: same-origin frame — unchanged behavior. */
.same-origin-frame {
  filter: url(#svg-filter);
}

/* Still applied on ANY frame: CSS filter functions are not
   SVG reference filters. Use these for cross-origin embeds. */
.cross-origin-frame {
  filter: blur(2px) brightness(0.8);
}
<svg width="0" height="0" aria-hidden="true">
  <filter id="svg-filter">
    <feGaussianBlur in="SourceGraphic" stdDeviation="5" />
  </filter>
</svg>

<!-- filtered (same-origin) -->
<iframe class="same-origin-frame" src="/local.html"></iframe>

<!-- unfiltered in Chrome 150+ (sandboxed = restricted) -->
<iframe class="restricted-frame" sandbox src="/local.html"></iframe>
Source: mirrors the WPT cross-origin-frame test and sandbox-frame test markup (feGaussianBlur url-reference on the iframe)

Compatibility.

Iframe restriction — engine support
EngineSupportEvidence
Chrome 150+ (desktop, Android, WebView)Enabled by default (milestone listing)ChromeStatus API record
Safari / WebKitRestricted since 2017 — WebKit allows SVG filters only on content in accessible security origins (same-origin keeps filters, cross-origin/plugins lose them). The standards-position request is open with no official position.WebKit changeset 216541 (2017, “Restrict SVG filters to accessible security origins”); WebKit bug 118689; position request #654 (open)
Firefox / GeckoNo position taken (request open) — currently allows SVG filters on cross-origin iframes, tracked as an open security bugMozilla standards-position #1395 (open); bugzilla 2004487 (NEW)
BCD / MDN compat dataUnknown — no dedicated entry exists for this behavior (explicit unknown)PR #13846 (unmerged at review time)
Cross-browser testssvg/styling/svg-filter-render-*.tentative.https.html (tentative reftests)WPT svg/styling

Security / privacy. This item is the security fix: SVG reference filters let an embedder arbitrarily manipulate the painted pixels of a frame it cannot script-access, enabling clickjacking-style manipulation of cross-origin or restricted content. Dropping the filter removes the embedder's ability to alter how the framed content looks (and thus what the user believes they are interacting with). The restriction trades off a legitimate styling capability on restricted embeds; CSS filter functions remain available as the unaffected alternative.

Source: PR #13846 (Clickjacking Attacks subsection); HTML standard — writing secure applications (clickjacking)

SVG reference filters on web plugins

Syntax. Same restricted construct — filter: url(#svg-filter) — but declared on a selector matching an element that instantiates a web plugin, such as <embed> or <object> (the canonical example being the browser's PDF viewer). The WPT plugin test applies the class carrying the url() filter directly to an <embed type="application/x-webkit-test-webplugin"> element.

Source: WPT web-plugin test; chromestatus feature summary (“embedded plugins (for example, PDFs)”)

Inputs. Two inputs: (1) a computed filter value containing an SVG reference filter, and (2) the element being a plugin-instantiating replaced element. Unlike the iframe case there is no origin input — plugins have no same-origin carve-out in the cited sources; the filter is skipped for plugins unconditionally.

Source: PR #13846 proposed text (“cross-origin/restricted iframes or web plugins”); chromestatus feature summary

Outputs. Painted output only: the plugin content renders with no SVG filter effect — the WPT web-plugin reference renders the <embed> unfiltered. Computed-style effect is not defined in any cited source (explicit unknown, as with iframes); non-SVG effects around the plugin still apply via the fallback algorithm.

Source: WPT web-plugin reference (no filter effect)

Errors. None by design, as with iframes: the declaration stays valid, no exception is raised, and the skip happens silently at paint time. No cited source defines a console message or devtools signal for the plugin case (explicit unknown — no stable public source).

Source: PR #13846 proposed text; ChromeStatus API feature record

Context / exposure. Same exposure as the iframe rule — desktop Chrome 150, Android 150, WebView 150, all Blink platforms, default-on with no opt-out surface. The practical case is embedded documents rendered by a plugin (for example PDFs), where the embedder has no access to the plugin's content yet could previously restyle its pixels.

Source: ChromeStatus API feature record; chromestatus feature summary

Lifecycle / state transitions. Evaluated at paint time whenever the plugin's element would be painted with an SVG filter effect; there is no latched state. The cited sources define no transitions specific to plugins beyond the shared effect-tree traversal — the WPT coverage is a single static render test with an unfiltered reference.

Source: chromestatus feature summary; WPT web-plugin test

Examples.

/* SKIPPED in Chrome 150+ — plugin content (e.g. the PDF viewer)
   paints without the SVG filter effect. */
.plugin-embed {
  filter: url(#svg-filter);
}
<!-- Unfiltered in Chrome 150+; the SVG reference filter is skipped. -->
<embed class="plugin-embed" src="document.pdf" type="application/pdf"
       width="600" height="400">

<!-- CSS filter functions remain the working alternative: -->
<style>
  .plugin-embed-dim { filter: brightness(0.85); }
</style>
Source: pattern from the WPT web-plugin test (url-reference filter class on <embed>); PDF example per the chromestatus feature summary

Compatibility.

Plugin restriction — engine support
EngineSupportEvidence
Chrome 150+ (desktop, Android, WebView)Enabled by default (milestone listing)ChromeStatus API record
Safari / WebKitRestricted since 2017 — SVG filters allowed only on content in accessible security origins; plugins are not script-accessible to the embedder and lose filtersWebKit changeset 216541 (2017); WebKit bug 118689; position request #654 (open)
Firefox / GeckoNo position taken (request open) — currently allows SVG filters on plugins and cross-origin iframesMozilla standards-position #1395 (open); bugzilla 2004487 (NEW)
BCD / MDN compat dataUnknown — no dedicated entry exists for this behavior (explicit unknown)PR #13846 (unmerged at review time)

Security / privacy. Plugin content (a PDF document, for instance) is rendered by the browser on the user's behalf and is not script-accessible to the embedder — but an SVG reference filter previously let the embedder arbitrarily manipulate its painted pixels, the same clickjacking-style manipulation the iframe rule closes. Skipping the filter restores the invariant that the embedder cannot alter how protected content looks.

Source: PR #13846 (Clickjacking Attacks subsection); HTML standard — writing secure applications (clickjacking)

Ancestor-effect fallback algorithm

Syntax. Not a developer-invoked construct — there is no CSS syntax to write or detect. The algorithm is the browser's defined reaction when a restricted frame or plugin would be painted inside an effect chain that includes an SVG filter: “the effect tree is traversed to find the highest ancestor without SVG filters, and that effect is then applied instead.” A page influences the outcome only by where it places non-SVG effects (e.g. opacity, transform, CSS filter functions) in the ancestor chain.

Source: chromestatus feature summary (algorithm wording)

Inputs. The effect tree of the composited page at the point a restricted frame or plugin is painted, and the set of effects on the path from that frame toward the root — specifically which of those effects involve SVG filters and which do not.

Source: chromestatus feature summary

Outputs. The highest ancestor effect that does not include an SVG filter is applied to the restricted content instead of the full effect chain. When no such ancestor effect exists, the practical output is the unfiltered frame — exactly what the WPT restricted-case references render (an iframe or plugin with no filter effect).

Source: chromestatus feature summary; WPT cross-origin-frame reference

Errors. None: the traversal is an internal paint-time fallback with no exception, no invalid declaration, and no defined developer-facing signal in the cited sources (explicit unknown whether any devtools indication exists — no stable public source).

Source: ChromeStatus API feature record; PR #13846 proposed text

Context / exposure. Runs wherever Blink paints a restricted frame or plugin inside an effect chain — all Blink platforms from Chrome 150. It is not observable from script except through painted output; there is no API, event, or CSS condition that exposes which fallback effect was chosen.

Source: ChromeStatus API feature record; chromestatus feature summary

Lifecycle / state transitions. Recomputed as the effect tree changes: restyling ancestors, changing the frame's origin or sandbox state, or navigating the frame all re-evaluate which ancestor effect applies. The WPT reload-as-sandbox and cross-origin-navigation-in-srcdoc tests exist precisely to pin these transitions.

Source: WPT reload-as-sandbox test; WPT cross-origin-navigation-in-srcdoc test

Examples. A non-SVG effect on an ancestor survives and applies to the restricted frame, because it is the highest ancestor effect without SVG filters:

/* The wrapper's opacity is the highest ancestor effect without
   SVG filters — it still applies to the cross-origin frame.
   The SVG filter on the frame itself is skipped. */
.embed-wrapper {
  opacity: 0.9;
  transform: scale(0.98);
}
.embed-wrapper iframe {
  filter: url(#svg-filter); /* skipped for cross-origin/sandboxed frames */
}
Source: behavior per the chromestatus feature summary (“highest ancestor without SVG filters”)

Compatibility.

Fallback algorithm — engine behavior
EngineBehaviorEvidence
Chrome 150+Highest non-SVG-filter ancestor effect applied insteadchromestatus feature summary
Safari / WebKitDoes not apply the filter in these cases (per the 2017 accessible-security-origin restriction; exact fallback mechanics not specified in public sources)WebKit changeset 216541; position request #654 (open)
Firefox / GeckoCurrently applies SVG filters on all iframes/plugins (no fallback needed); position under considerationMozilla standards-position #1395
SpecificationUnknown — PR #13846 mandates the restriction but does not specify the ancestor-effect fallback; the algorithm is currently Chrome-implementation-defined (explicit unknown)PR #13846

Security / privacy. The fallback preserves the security invariant — the restricted content is never painted through an SVG filter — while keeping the page's remaining visual effects intact, so sites do not lose non-SVG styling (opacity, transforms, CSS filter functions) around legitimate embeds. Reviewers on PR #13846 have asked for the spec to pin down exactly which reference filters and hierarchies are covered so other engines do not have to reverse-engineer this behavior.

Source: PR #13846 (proposed text + review discussion); chromestatus feature summary

Examples

Live example from the Chrome Platform Showcase: side-by-side SVG-reference vs CSS-function filters on same-origin, cross-origin, and sandboxed iframes. Source: chrome-platform-showcase — filter-comparison

The showcase feature for this change also ships sandbox-filter-test (sandboxed-frame behavior), clickjacking-replay (the attack this closes), and svg-filter-policy-tester (per-scenario checks). Per-item markup examples live in the behavior reference above.

/* Minimal probe: an SVG reference filter on a cross-origin iframe
   is skipped in enforcing engines; blur() still applies everywhere. */
const frame = document.querySelector('iframe.cross-origin');
getComputedStyle(frame).filter;  // the skip is paint-time only — no error,
                                 // no invalid declaration; computed-value
                                 // behavior is not defined in cited sources
                                 // (explicit unknown, see behavior reference)
Source: chrome-platform-showcase feature (identity-matched to chromestatus 5117170452398080; route HEAD-checked 200, 2026-07-26)

web platform tests

The feature ships with tentative cross-browser reftests under WPT svg/styling (svg-filter-render-*.tentative.https.html). Each restricted-case test applies an feGaussianBlur url-reference filter and references a render with no filter effect; same-origin cases reference the filtered render:

Source: ChromeStatus API record (wpt_descr); WPT svg/styling directory

caveats and open questions

Source: PR #13846 (status + review discussion); ChromeStatus API feature record

browser support

Browser support
BrowserSupportNotes
Chrome 150+ (desktop, Android, WebView)Enabled by defaultMilestone listing; all Blink platforms
EdgeUnknownNo BCD entry or explicit signal; Chromium-based, so expected to follow Chrome — unverified (explicit unknown)
FirefoxNo position takenCurrently allows SVG filters on cross-origin iframes/plugins (position request; bugzilla 2004487)
SafariRestricted since 2017SVG filters allowed only on accessible-security-origin content; same-origin keeps filters, cross-origin/plugins lose them (changeset 216541; position request)
Source: ChromeStatus API feature record (vendor views)

Specifications

Specifications
SpecificationStatusComment
Filter Effects Module Level 1Proposed addition (PR open, unmerged)w3c/csswg-drafts PR #13846 adds a “Clickjacking Attacks” subsection: user agents must not apply SVG reference filters to cross-origin/restricted iframes or web plugins
HTML — writing secure applicationsLiving standard (referenced)Clickjacking guidance the PR points at
Source: PR #13846 (state + diff, fetched 2026-07-26)

see also