Dostęp do sieci prywatnej: rozszerzona ochrona dla procesów internetowych i pobierania nawigacji

Jonathan Hao
Jonathan Hao

Czym jest dostęp z sieci prywatnej?

Dostęp do sieci prywatnej (PNA, wcześniej CORS-RFC1918 i krótko „Dostęp do sieci lokalnej”) to funkcja zabezpieczeń, która ogranicza możliwość wysyłania żądań przez witryny do serwerów w sieciach prywatnych. Pomaga to chronić użytkowników i sieci wewnętrzne przed potencjalnymi atakami, takimi jak atak polegający na sfałszowaniu żądania z innej witryny (CSRF). Chrome stopniowo wdraża PNA, a w przyszłych wersjach rozszerzy ochronę.

Najważniejsze zabezpieczenia PNA (z ich bieżącym stanem)

  • Bezpieczne konteksty: tylko bezpieczne konteksty mogą wysyłać żądania zasobów podrzędnych w sieci prywatnej (obowiązkowo od wersji Chrome 94). Więcej informacji znajdziesz w artykule o aktualizacji usługi Private Network Access.
  • Żądania wstępne: Chrome wysyła żądania wstępne przed żądaniami zasobów podrzędnych w sieci prywatnej, aby sprawdzić uprawnienia serwera (w Chrome 104 i nowszych w przypadku błędów wyświetlane są ostrzeżenia w Narzędziech deweloperskich, a w Chrome 130 będzie to wymagane). Opisaliśmy to w artykule Dostęp z sieci prywatnej: wstępne procesy. Od wersji 123 przeglądarki Chrome pomija niektóre nagłówki CORS, takie jak Accept, jeśli pakiet wstępny jest tworzony i wysyłany tylko z powodu PNA.
  • Wyjątki dotyczące tego samego źródła: od wersji 115 Chrome żądania z tego samego źródła pochodzące z potencjalnie zaufanych źródeł są zwolnione z ograniczeń związanych z zasadami PNA.

Rozszerzona ochrona: pracownicy internetowi

Ochrona PNA zostanie rozszerzona na skrypty web worker (dedykowane, współdzielone i skrypty service worker). Obejmuje to m.in.:

  • Pobieranie skryptów robota: wymaga bezpiecznych kontekstów i testów wstępnych w przypadku mniej publicznych adresów IP. Ostrzeżenia od wersji 110, które będą wymagane w wersji 130.
  • Pobierania inicjowane przez skrypty robocze: wszystkie pobierania z wykonywania skryptów roboczych podlegają tym samym regułom PNA.

Od wersji 124 Chrome możesz testować wymuszanie, wykonując te czynności:

  • Wyłącz chrome://flags/#private-network-access-ignore-worker-errors
  • Włącz chrome://flags/#private-network-access-respect-preflight-results

Rozszerzona ochrona: pobieranie danych nawigacji

PNA dotyczy również pobierania elementów nawigacji (iframe, wyskakujące okienka) ze względu na ich potencjalne wykorzystanie w atakach CSRF. W Chrome 123 zaczęliśmy wyświetlać ostrzeżenia o niepowodzeniach. W Chrome 130 zaczniemy egzekwować te zasady.

Od wersji 124 Chrome możesz testować egzekwowanie zasad:

  • Wyłącz chrome://flags/#private-network-access-ignore-navigation-errors
  • Włącz chrome://flags/#private-network-access-respect-preflight-results

Gdy PNA blokuje żądanie nawigacji, użytkownicy zobaczą określony błąd z opcją ręcznego ponownego wczytania i zezwolenia na żądanie.

Gdy PNA blokuje żądanie nawigacji, użytkownicy zobaczą określony błąd z opcją ręcznego ponownego wczytania i zezwolenia na żądanie.
Gdy PNA blokuje żądanie nawigacji, użytkownicy widzą określony błąd z opcją ręcznego ponownego wczytania i zezwolenia na żądanie.

Co zrobić, jeśli Twoja witryna jest zainfekowana?

W poście Dostęp z sieci prywatnej: prezentacja wstępnej analizy zapytań znajdziesz wskazówki. Ważne: w przypadku żądań nawigacji:

  • Access-Control-Allow-Origin nie może być symbolem wieloznacznym ("*").
  • Access-Control-Allow-Credentials musi mieć wartość "true".

Co dalej?

  • WebSockets w wersji Chrome 126 (wstępnej) PNA będzie obsługiwać uzgodnienia połączenia WebSocket (najpierw ostrzeżenia).
  • Pełne egzekwowanie: wszystkie ograniczenia dotyczące PNA zostaną wdrożone (blokując żądania niezgodne z zasadami) w Chrome 130. Użytkownicy będą mogli w ustawieniach witryny zastąpić PNA w przypadku zaufanych witryn.

Opinie dotyczące zastosowań sieci prywatnych

Jeśli hostujesz witrynę w sieci prywatnej, która potrzebuje żądań z sieci publicznej, zespół Chrome chce otrzymać od Ciebie opinię. Zgłoś problem w narzędzie do śledzenia błędów Chromium (komponent: Blink>SecurityFeature>CORS>PrivateNetworkAccess).

Zdjęcie: Jakub ŻerdzickiUnsplash