Intent to Experiment: Connection Allowlists - Embedded Enforcement Contact emails
[email protected]<mailto:[email protected]>, [email protected]<mailto:[email protected]> Explainer https://github.com/WICG/connection-allowlists (embedded enforcement: issues/1) Specification https://wicg.github.io/connection-allowlists/ Design doc https://docs.google.com/document/d/1k7vcy3tPIYpD01DyuLEvEPYydOMAZRd8ASdIHX-uZi0 Base feature design doc: https://docs.google.com/document/d/1B3LERUObjVDAKBNLpdIxbk8LC96rWUn1q8vtP9pPIuA Implementation design (in-tree): https://chromium.googlesource.com/chromium/src/+/main/docs/connection_allowlist_design.md Summary Connection Allowlists restrict the endpoints a document or worker may connect to. This extension lets a parent document require an allowlist of the content it embeds, via a connectionallowlist attribute on the iframe. The embedded document either satisfies the requirement - by opting in with Allow-Connection-Allowlist-From, by delivering an at least as strict Connection-Allowlist of its own, or implicitly if it is a local-scheme document such as srcdoc or data: - or it is not loaded. The requirement is inherited by descendants and workers and re-checked on every navigation, so embedded content cannot escape it by nesting or redirecting. Motivation Embedders increasingly need to run embedded content in a sandboxed environment. The sandbox attribute already constrains what such content may do: run script, submit forms, open popups, act with an origin. It says nothing about where that content may connect. A fully sandboxed frame can still reach any endpoint and send it whatever it can read, so the dimension that matters most for exfiltration is the one the platform cannot currently constrain. Connection Allowlists constrain exactly that, but only for the context that delivers the header. An embedder cannot hold what it embeds to a comparable restriction, so embedded content becomes the bypass. Local-scheme frames cannot set response headers at all, so they cannot participate even voluntarily. Embedded enforcement supplies the missing network dimension of the sandbox, guaranteed to only tighten as it is inherited, and mirrors CSP Embedded Enforcement (the csp attribute, Sec-Required-CSP, Allow-CSP-From) so embedded policy enforcement stays a single mechanism. User-facing problem A user cannot tell host content from embedded content; trust given to the site covers the whole page. A site can promise not to send user data to arbitrary endpoints, but cannot make that promise on behalf of what it embeds. The only containment tool available today, sandbox, cannot restrict connections. This means that one overly permissive widget, or one injected snippet in a srcdoc frame, breaks the promise invisibly. Embedded enforcement lets the site extend the promise to everything it embeds, however deeply content nests. Use cases * A privacy- or compliance-sensitive application embedding third-party UI that must not reach arbitrary endpoints. * A page rendering untrusted content in a srcdoc or data: frame - newly possible, since local-scheme frames cannot set response headers and so could not participate before. * A constrained document needing its guarantee to extend transitively to embedded frames and the workers they spawn. Accessibility, Privacy, and Security Considerations Accessibility: no impact. The feature affects only whether connections are permitted and whether a frame commits; it does not change rendering, focus, or assistive technology behavior. Security: a defense-in-depth feature, fail-closed - an unsatisfied requirement blocks the frame rather than loading it unenforced. An embedder cannot silently impose policy on unwilling cross-origin content (the embedded document must opt in), and the requirement can only tighten as it is inherited. Privacy: no new cross-origin information about the user is exposed. An embedded document can observe that it is subject to a requirement, since that requirement is sent to it directly as Sec-Required-Connection-Allowlist - information the embedder deliberately discloses, analogous to Sec-Required-CSP. A blocked document never loads and observes nothing. Blink component Blink>SecurityFeature>ConnectionAllowlist Search tags connection allowlist, iframe, embedded enforcement, CSP, security TAG review / status https://github.com/w3ctag/design-reviews/issues/1173 Status: Resolved, satisfied (closed 9 Jul 2026). Risks Interoperability and Compatibility Still incubating in the WICG, so shape and functionality may not be final. Enforcement can block a frame from loading, but only where an embedder explicitly sets the attribute, so existing content is unaffected. * Gecko: Positive - https://github.com/mozilla/standards-positions/issues/1322 (position: positive, closed 7 Aug 2026). * WebKit: No signal - https://github.com/WebKit/standards-positions/issues/583 (open, no formal reply as of this draft). * Web developers: Positive - https://github.com/WICG/connection-allowlists/issues/1 Ergonomics Follows the CSP embedded enforcement pattern developers already know. A framed document that already ships a compatible Connection-Allowlist needs no changes, and local-scheme documents opt in implicitly. Activation <iframe src="https://example.com/widget" connectionallowlist="(response-origin)"></iframe> The framed document then opts in via Allow-Connection-Allowlist-From, delivers a subsuming Connection-Allowlist, or qualifies implicitly as a local-scheme document. WebView application risks None. The feature is inert unless an embedder sets the attribute, so no existing content changes behavior. Goals for experimentation * Validate the implementation in real deployments and confirm it unblocks the motivating partner. * Confirm the three satisfaction paths match how embedders and embedded parties actually coordinate, and that subsumption ("at least as strict as") behaves as expected for realistic allowlists. * Measure how often each outcome occurs via the four UseCounters — in particular whether blocking is rare and whether one satisfaction path dominates. * Evaluate inheritance ergonomics through nested documents and workers, and confirm the never-loosen rule causes no unexpected breakage. Ongoing technical constraints None Debuggability Blocked responses raise a DevTools issue (ConnectionAllowlistEmbeddedEnforcementIssue); a separate issue covers an invalid Allow-Connection-Allowlist->From header. Blocked requests appear in the Network panel, the handshake headers are inspectable there, and the connectionAllowlist IDL attribute is readable from the console. Will this feature be supported on all six Blink platforms? Yes. Is this feature fully tested by web-platform-tests? Yes Flag name on about://flags Experimental Web Platform features (about://flags#enable-experimental-web-platform-features). There is no dedicated about://flags entry for embedded enforcement; the separate "Connection allowlists" entry toggles only the base network feature, which is already enabled by default. Finch feature name ConnectionAllowlistEmbeddedEnforcement Origin trial feature name ConnectionAllowlistEmbeddedEnforcement Requires code in //chrome? False Tracking bug https://issues.chromium.org/issues/522111613 Estimated milestones Origin trial desktop first 156 Origin trial desktop last 159 Origin trial Android first 156 Origin trial Android last 159 Origin trial WebView first 156 Origin trial WebView last 159 Link to entry on the Chrome Platform Status https://chromestatus.com/feature/5657801797009408 Feedback submission: https://github.com/WICG/connection-allowlists/issues Links to previous Intent discussions Intent to Prototype: https://groups.google.com/a/chromium.org/g/blink-dev/c/QHhBWQ0oUrA Base feature ChromeStatus entry: https://chromestatus.com/feature/5175745573945344 Base feature Intent to Experiment: https://groups.google.com/a/chromium.org/g/blink-dev/c/lRMJ8iwaKbM Base feature Intent to Ship: https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6a3d7aca.54d5f168.18adb4.00dd.GAE%40google.com -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/PH0PR00MB33477A8DDBB9B679579195ADB9B92%40PH0PR00MB3347.namprd00.prod.outlook.com.
