Thanks for all the detailed explanations. LGTM2.

On Wed, Sep 3, 2025 at 8:48 AM Chris Thompson <[email protected]> wrote:

> *To Vlad's questions:*
>
> > - I assume direct navigation to a local network is fine and remains
> without permission? (like navigating to your router's settings page)
>
> Correct, main frame navigations are not currently in scope.
>
> > - By "secure context", you mean that the page which wants to access
> local network has to be secure. Is that right?
>
> Yes, to be granted the permission the requesting page must be a secure
> context.
>
> > - What's the behavior of local file (file://) accessing local network?
>
> This is somewhat weakly specified currently (file:// URLs are weird in
> general), but Chromium's behavior is to treat them the same as
> http://localhost/ and thus not subject to LNA restrictions.
>
> *To Daniel's question:*
>
> > 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?
>
> Certain requests would fail due to the combination of the LNA permission
> requiring secure contexts and mixed content blocking.
>
> The main case that breaks is a public site making a request to
> http://a.example, which *resolves* to a local IP address (or the loopback
> address). Today, that site could be on HTTP to avoid having these requests
> blocked as mixed content. With LNA, the site must be on HTTPS to request
> the permission, *but* the browser can't know that these subresource
> requests are until after we've resolved the hostname (which occurs *after* 
> mixed
> content blocking).
>
> For fetch() calls, we have the `targetAddressSpace` option for
> pre-specifying that requests like this are to the local network, and thus
> we can exempt them from mixed content blocking. This may require some
> slight modifications to existing sites to add the flag to any affected
> fetch() calls to avoid breakage.
>
> The reverse OT helps give a temporary escape hatch here, to give sites
> more time to adapt (such as adding `targetAddressSpace` flags, migrating to
> HTTPS, etc.). We plan to follow up with any sites that enroll in the OT to
> try to see if there are additional affordances we could add to the spec and
> our implementation to help address why they can't migrate to HTTPS yet.
>
> On Wed, Sep 3, 2025 at 8:35 AM Daniel Bratell <[email protected]> wrote:
>
>> 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
>>>>>
>>>>> Specification
>>>>>
>>>>> 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/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
>>>>>
>>>>> 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
>>>>>
>>>>> 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 to
>>>>> 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, .local domains, 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)
>>>>> Firefox is prototyping based on our spec draft. Request for signals:
>>>>> https://github.com/mozilla/standards-positions/issues/1260
>>>>>
>>>>> WebKit: No signal. Request for signals:
>>>>> https://github.com/WebKit/standards-positions/issues/520
>>>>>
>>>>> Web developers: Mixed signals (
>>>>> 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/)
>>>>>
>>>>> 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 WebView
>>>>> 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
>>>>>
>>>>> 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
>>>>>
>>>>> Launch bug
>>>>>
>>>>> https://launch.corp.google.com/launch/4395658
>>>>>
>>>>> Sample links
>>>>>
>>>>> 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
>>>>>
>>>>> 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
>>>>>
>>>>> Intent to Experiment:
>>>>> 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
>>>>>
>>>>>
>>>>> 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/CALMy46SACi%2B3kGz_sQUfYxK9ucSjp0GMzKNyVgPip5mynf4nAg%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALMy46SACi%2B3kGz_sQUfYxK9ucSjp0GMzKNyVgPip5mynf4nAg%40mail.gmail.com?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/CAOMQ%2Bw8SK69gpEaZ7GZcvb6nzAmd5sDKR3UzRHvtJ1MNexryxg%40mail.gmail.com.

Reply via email to