In addition to Vlad's questions, I have one question about this line in
the Compat section:
> Based on our UseCounter
PrivateNetworkAccessInsecureResourceNotKnownPrivate, we currently
estimate an upper bound of 0.004% of page loads may make local network
requests which would currently run afoul of mixed content blocking
despite the exceptions we have added.
I don't quite understand how these people are affected. Will something
break for them, or open up for them? If something breaks, how badly does
it break? Or is it something that we want to break?
/Daniel
On 2025-09-03 17:29, Vladimir Levin wrote:
Hey, I just wanted to clarify a couple of use cases:
- I assume direct navigation to a local network is fine and remains
without permission? (like navigating to your router's settings page)
- By "secure context", you mean that the page which wants to access
local network has to be secure. Is that right?
- What's the behavior of local file (file://) accessing local network?
Thanks,
Vlad
On Wednesday, September 3, 2025 at 10:23:02 AM UTC-4 Alex Russell wrote:
Sorry, failed to spot the long discussion in Considered
Alternatives in the Explainer. Thanks for putting it all down there.
LGTM1
On Wednesday, September 3, 2025 at 3:20:54 PM UTC+1 Alex Russell
wrote:
Is there a document that summarises why Private Network Access
was abandoned? And was there any discussion of explicit API
for this?
Best,
Alex
On Wednesday, September 3, 2025 at 12:32:02 AM UTC+1 Chris
Thompson wrote:
Contact emails
[email protected]
Explainer
https://github.com/WICG/local-network-access/blob/main/explainer.md
<https://github.com/WICG/local-network-access/blob/main/explainer.md>
Specification
https://wicg.github.io/local-network-access
<https://wicg.github.io/local-network-access>
Summary
Chrome 141 restricts the ability for sites to make
requests to the user's local network, gated behind a
permission prompt.
A local network request is any request from a public
website to a local IP address or loopback, or from a local
website (e.g. intranet) to loopback. Gating the ability
for websites to perform these requests behind a permission
mitigates the risk of cross-site request forgery attacks
against local network devices such as routers, and reduces
the ability of sites to use these requests to fingerprint
the user's local network.
This permission is restricted to secure contexts. If
granted, the permissions additionally relaxes mixed
content blocking for local network requests (since many
local devices are not able to obtain publicly trusted TLS
certificates). Requests from insecure contexts will be
silently rejected. Sites may temporarily opt-out of the
secure contexts restriction using the reverse origin trial
“Local Network Access from Non-Secure Contexts
<https://developer.chrome.com/origintrials/#/view_trial/3826370833404657665>”,
included in this launch.
This initial version of Local Network Access (LNA) applies
to subresource requests, fetch() requests, and navigating
subframes. In the near future we plan to send a separate
Intent-to-Ship for applying LNA to WebSockets,
WebTransport, and WebRTC connections.
This work supersedes a prior effort called "Private
Network Access"
(e.g.,https://chromestatus.com/feature/5737414355058688
<https://chromestatus.com/feature/5737414355058688>,https://chromestatus.com/feature/5954091755241472
<https://chromestatus.com/feature/5954091755241472>) which
used preflight requests to allow local devices to opt-in
to receiving requests.
Enterprises that need to disable or auto-grant the
permission can do so using the
LocalNetworkAccessAllowedForUrls
<https://chromeenterprise.google/policies/#LocalNetworkAccessAllowedForUrls>and
LocalNetworkAccessBlockedForUrls
<https://chromeenterprise.google/policies/#LocalNetworkAccessBlockedForUrls>policies.
The value of '*' can be used to allow local network access
on all URLs, matching the behavior prior to rolling out
the restrictions. At launch, the policies can be set using
custom configurations
<https://support.google.com/chrome/a/answer/14749672>.
Blink component
Blink>SecurityFeature>LocalNetworkAccess
<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ESecurityFeature%3ELocalNetworkAccess%22>
TAG review
https://github.com/w3ctag/design-reviews/issues/1116
<https://github.com/w3ctag/design-reviews/issues/1116>
TAG review status
Issues addressed (satisfied with concerns)
Origin Trial Name
Local Network Access from Non-Secure Contexts
<https://developer.chrome.com/origintrials/#/view_trial/3826370833404657665>
Chromium Trial Name
LocalNetworkAccessNonSecureContextAllowed
Origin Trial documentation link
https://developer.chrome.com/blog/local-network-access
<https://developer.chrome.com/blog/local-network-access>
Risks
Interoperability and Compatibility
Interoperability risks:
LNA requires a Secure Context to make local network
requests, but exempts some of these local network requests
from mixed content checks (if the user grants permission).
If another browser does not implement LNA, these same
local network requests might be blocked as mixed content,
or the site might need to serve over HTTPS for Chrome and
over HTTP for browsers that don't implement LNA (to avoid
triggering mixed content).
Compatibility risks:
There are some local network requests types that we cannot
know ahead of time will be going to the local network
(e.g., a subresource request tohttp://test.example
<http://test.example/>which then resolves to 192.168.0.1).
These would be blocked as mixed content, as mixed content
checks happen before hostname resolution (i.e., they occur
before "Obtain a connection" in Fetch). Explicit local IP
addresses, .localdomains, and fetch() requests with the
new `targetAddressSpace` fetch() option are exempted from
mixed content checks, but other connection types may be
difficult for developers to work around mixed content
blocking (e.g., WebSockets wicg/local-network-access#16
<https://github.com/wicg/local-network-access/issues/16>).
Alongside shipping these restrictions we are running a
reverse origin trial to allow sites to (temporarily)
opt-out of the secure contexts requirement -- this would
be an escape hatch for mixed content. This origin trial
can only be enabled through origin tokens delivered via
HTTP header due the trial affecting the security policy of
the document being loaded.
We have previously run a Dev Trial and a 50% Finch
experiment on Canary/Dev/Beta which helped alert
potentially affected developers and find some bugs early
before shipping. Based in part on questions from affected
developers we have put together an “LNA Adoption Guide
<https://docs.google.com/document/d/1QQkqehw8umtAgz5z0um7THx-aoU251p705FbIQjDuGs/edit?usp=sharing>”
to help affected sites adapt to these new restrictions.
Based on our UseCounter
PrivateNetworkAccessInsecureResourceNotKnownPrivate
<https://chromestatus.com/metrics/feature/timeline/popularity/5319>,
we currently estimate an upper bound of 0.004% of page
loads may make local network requests which would
currently run afoul of mixed content blocking despite the
exceptions we have added.
Gecko: Under consideration
(https://groups.google.com/a/mozilla.org/g/dev-platform/c/B8oN3ARp_j0/m/rWKXmnj4AAAJ
<https://groups.google.com/a/mozilla.org/g/dev-platform/c/B8oN3ARp_j0/m/rWKXmnj4AAAJ>)
Firefox is prototyping based on our spec draft. Request
for signals:
https://github.com/mozilla/standards-positions/issues/1260
<https://github.com/mozilla/standards-positions/issues/1260>
WebKit: No signal. Request for signals:
https://github.com/WebKit/standards-positions/issues/520
<https://github.com/WebKit/standards-positions/issues/520>
Web developers: Mixed signals
(https://github.com/explainers-by-googlers/local-network-access/issues
<https://github.com/explainers-by-googlers/local-network-access/issues>).
Feedback from developers has been mixed, both due the new
burden of a permission prompt (compared to PNA) and from
some of the difficulty of navigating mixed content (the
same as PNA). Many developers understand the reasoning
behind adding the new permission though, and are
productively engaging on how they can avoid issues.
Other signals: Brave ships a "localhost access" permission
(see
https://brave.com/privacy-updates/27-localhost-permission/
<https://brave.com/privacy-updates/27-localhost-permission/>)
Ergonomics
N/A
Activation
A new permission will be shown to users, which may be
unexpected. If users deny the permission, functionality
may break (potentially requiring additional support from
site owners). Part of our goal for having a Dev Trial was
to give site owners time to adjust their requests
(especially if they need to use the mixed content
exemptions) and to potentially adapt their UX flows so the
permission requests are less surprising to users. We have
collected some advice for how sites can adapt to these new
restrictions in our “LNA Adoption Guide
<https://docs.google.com/document/d/1QQkqehw8umtAgz5z0um7THx-aoU251p705FbIQjDuGs/edit?usp=sharing>”.
Security
Exempting some requests from mixed content checks based on
declared targetAddressSpace could potentially be used to
arbitrarily bypass mixed content. To avoid this, Chrome
verifies that the actual resolved address space matches
what was declared, and blocks the request if it does not.
WebView application risks
These restrictions do not apply to WebView (see below).
Debuggability
When a request would be blocked under LNA, we add a new
DevTools Issue with details.
Will this feature be supported on all six Blink
platforms (Windows, Mac, Linux, ChromeOS, Android,
and Android WebView)?
No
Android WebView currently doesn't support letting apps
grant any new permission types, so the Local Network
Access permission is currently unconditionally granted in
WebView. In parallel to this effort, Android is adding a
Local Network permission which would apply to the app that
embeds the
WebViewhttps://developer.android.com/privacy-and-security/local-network-permission
<https://developer.android.com/privacy-and-security/local-network-permission>
Is this feature fully tested by web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
No
We have coverage of core aspects of the feature in WPTs
and are actively working on building out the test suite
https://wpt.fyi/results/fetch/local-network-access
<https://wpt.fyi/results/fetch/local-network-access>. We
have additional testing coverage in Chromium browser
tests, particularly for areas that are difficult to write
WPTs for.
DevTrial instructions
https://developer.chrome.com/blog/local-network-access
<https://developer.chrome.com/blog/local-network-access>
Flag name on about://flags
local-network-access-check
Finch feature name
LocalNetworkAccessChecks
Rollout plan
Will ship enabled for all users
Requires code in //chrome?
True
Tracking bug
https://crbug.com/394009026 <https://crbug.com/394009026>
Launch bug
https://launch.corp.google.com/launch/4395658
<https://launch.corp.google.com/launch/4395658>
Sample links
https://lna-testing.notyetsecure.com
<https://lna-testing.notyetsecure.com>
Estimated milestones
Shipping on desktop
141
Origin trial desktop first
141
Origin trial desktop last
146
DevTrial on desktop
138
Shipping on Android
141
Origin trial Android first
141
Origin trial Android last
146
DevTrial on Android
139
Anticipated spec changes
Open questions about a feature may be a source of future
web compat or interop issues. Please list open issues
(e.g. links to known github issues in the project for the
feature specification) whose resolution may introduce web
compat/interop risk (e.g., changing to naming or structure
of the API in a non-backward-compatible way).
None
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5152728072060928?gate=5199213979500544
<https://chromestatus.com/feature/5152728072060928?gate=5199213979500544>
Links to previous Intent discussions
Intent to Prototype:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALMy46SB%2Bv9dnp-wrJ4WH0R4UJmWuutq1st92%3D_zOyhnLJ_vkw%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALMy46SB%2Bv9dnp-wrJ4WH0R4UJmWuutq1st92%3D_zOyhnLJ_vkw%40mail.gmail.com>
Intent to Experiment:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAHEiSH03XUPgcAkVmE25PpvDXMsx%3D16Kgeid_KJ8vRgyvueNuA%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAHEiSH03XUPgcAkVmE25PpvDXMsx%3D16Kgeid_KJ8vRgyvueNuA%40mail.gmail.com>
Ready for Developer Testing:
https://groups.google.com/a/chromium.org/g/blink-dev/c/D4nqAa3FUN8/m/WFVmJYh0BAAJ
<https://groups.google.com/a/chromium.org/g/blink-dev/c/D4nqAa3FUN8/m/WFVmJYh0BAAJ>
This intent message was generated by Chrome Platform
Status <https://chromestatus.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/8863a050-972e-4d00-9960-b4dc6436b013n%40chromium.org
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/8863a050-972e-4d00-9960-b4dc6436b013n%40chromium.org?utm_medium=email&utm_source=footer>.
--
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/88058ad2-a5c7-4099-ba17-240836e6bf70%40gmail.com.