Chrome 124 bevat de toestemming voor privénetwerktoegang om de functie voor gemengde inhoud te versoepelen . Er loopt een proefperiode voor sites die meer tijd nodig hebben om zich op deze wijziging voor te bereiden. Deze proefperiode eindigt echter met Chrome 132, dat naar verwachting op 4 februari 2025 wordt uitgebracht. In dit bericht wordt de wijziging uitgelegd, meer over het ontwerp van de functie, hoe om uw huidige websites te migreren en hoe u uw implementatie kunt testen.
Wat verandert er?
Om verbindingen tot stand te brengen met apparaten op een particulier netwerk die geen globaal unieke namen hebben en daarom geen TLS-certificaten kunnen verkrijgen, introduceert deze functie een nieuwe optie om fetch()
aan te geven om de intentie van een ontwikkelaar aan te geven om met een dergelijk apparaat te praten. Dit omvat een nieuwe beleidsgestuurde functie om de toegang van elke site tot deze mogelijkheid af te sluiten, en nieuwe headers voor de preflight-reactie van de server om aanvullende metagegevens te leveren.
Wat is particuliere netwerktoegang?
Private Network Access (PNA, voorheen bekend als CORS-RFC1918 en kortweg Local Network Access) is een beveiligingsfunctie die de mogelijkheid van websites beperkt om verzoeken naar servers op particuliere netwerken te sturen. Dit helpt gebruikers en interne netwerken te beschermen tegen mogelijke aanvallen zoals Cross-Site Request Forgery (CSRF). Chrome heeft PNA geleidelijk geïmplementeerd en de bescherming zal in komende releases worden uitgebreid.
Waarom is een toestemmingsprompt nodig?
Chrome 94 introduceerde een blokkering van de toegang tot privénetwerken vanaf niet-beveiligde openbare websites. De lopende proef voor de beëindiging van Private Network Access vanuit niet-beveiligde contexten heeft problemen aan het licht gebracht bij het migreren van getroffen websites naar HTTPS. Een veelvoorkomend probleem is de moeilijkheid om privé-apparaten naar HTTPS te migreren, wat leidt tot overtredingen van gemengde inhoudscontroles.
Om dit probleem aan te pakken, is er een nieuwe toestemmingsprompt toegevoegd onder een origin-proefversie van Chrome 120 en in stable van Chrome 124.
Wanneer is een toestemmingsprompt nodig?
We waren van plan de proefperiode voor het beëindigen van niet-beveiligde contexten te beëindigen enkele mijlpalen nadat de functie voor toestemmingsprompts beschikbaar kwam. Om compatibiliteit te garanderen, moet u uw openbare websites naar HTTPS migreren. Als u uw privéserver niet naar HTTPS kunt migreren, kunt u met de nieuwe toestemmingspromptcontrole de controle op gemengde inhoud versoepelen.
Een typische workflow voor een verzoek om privénetwerktoegang met toestemmingsprompt is als volgt.
Activeer de toestemmingsprompt
Voeg het nieuwe kenmerk targetAddressSpace
toe als ophaaloptie, waarna het verzoek de controle op gemengde inhoud kan overslaan.
fetch("http://router.local/ping", {
targetAddressSpace: "private",
});
In overeenstemming met Private Network Access: preflights introduceren , wordt elk verzoek tot een particulier netwerk voorafgegaan door een preflightverzoek. Deze preflight-aanvraag bevat een nieuwe header, Access-Control-Request-Private-Network: true
, en het bijbehorende antwoord moet de header Access-Control-Allow-Private-Network: true
bevatten.
Om tegemoet te komen aan de nieuwe toestemmingsprompt moeten apparaten twee nieuwe antwoordheaders bevatten: Private-Network-Access-Name
en Private-Network-Access-ID
.
-
Private-Network-Access-ID
: een 48-bits waarde weergegeven als 6 hexadecimale bytes, gescheiden door dubbele punten. -
Private-Network-Access-Name
: een geldige naam als tekenreeks die overeenkomt met de reguliere ECMAScript-expressie/^[a-z0-9_-.]+$/.
De maximale lengte van de naam is 248 UTF-8-code-eenheden.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"
Demo
Je kunt de demo bekijken op: https://private-network-access-permission-test.glitch.me/ .
Om de demowebsite te kunnen gebruiken, moet u uw persoonlijke privéserver starten. De privéserver moet reageren met de HTTP-header Access-Control-Allow-Private-Network: true
, samen met door de server opgegeven headers Private-Network-Access-ID
en Private-Network-Access-Name
. Als alles correct is ingesteld, zou de volgende toestemmingsprompt moeten worden weergegeven:
Sluit de proefperiode voor de beëindiging van de niet-beveiligde context af
Voor websites die Private Network Access hebben geregistreerd voor de beëindiging van de proefperiode voor niet-beveiligde contexten , is dit het moment om uw website te migreren met onze nieuwe toestemmingsprompt en de proefperiode nu af te sluiten.
Nadat u uw code heeft bijgewerkt, verwijdert u het proeftoken uit uw HTML-, JavaScript- of HTTP-headers. Als u niet meer weet waar u het proeftoken hebt geplaatst, raadpleegt u het gedeelte Registreren voor beëindiging van de proefperiode in het vorige blogbericht.
Mogelijk wilt u ook het token op de proefpagina verwijderen.
Wat is het volgende?
De oplossing voor verzoeken van niet-API fetch()
wordt nog onderzocht.
Er zijn verschillende oplossingen getest, bijvoorbeeld door gebruik te maken van servicemedewerkers of het maken van doeladresruimte als een nieuw Content-Security-beleid. De uiteindelijke vorm voor verzoeken van niet-API fetch()
wordt echter nog onderzocht.
Verzoeken van subframes kunnen in de toekomst mogelijk worden ondersteund met toestemmingsbeleid.
In de toekomst willen we mogelijk het toestemmingsbeleid ondersteunen om de mogelijkheid voor subframes te versoepelen.
Feedback voor gebruiksscenario's voor privénetwerken
Als u een website host op een particulier netwerk waarvoor verzoeken van openbare netwerken nodig zijn, wil het Chrome-team uw feedback! Dien een probleem in bij de Chromium Issue Tracker (component: Blink>SecurityFeature>CORS>PrivateNetworkAccess) of in de GitHub-repository .
Bronnen
- Toegangstoestemming voor particulier netwerk Spec
- Verklaring van toestemming voor toegang tot privénetwerk
- Loop door een ontspannende gemengde context voor toegang tot privénetwerken
- Proefperiode voor toestemming tot toestemming voor particuliere netwerktoegang: een pad om websites met HTTPS te migreren