Wydano przeglądarkę internetową Firefox 147 oraz zaktualizowane starsze wersje z długoterminowym wsparciem — 140.7.0 i 115.32.0. Wersja Firefox 148 przeszła do etapu beta-testów, a jej wydanie planowane jest na 24 lutego.
Główne nowości w Firefox 147 (1, 2, 3):
- Dodano wsparcie dla specyfikacji Freedesktop.org XDG Base Directory oraz możliwość używania katalogu „~/.config/mozilla” do przechowywania profili, dodatków, ustawień i wewnętrznych baz danych. Wsparcie dla przechowywania danych w starym katalogu „~/.mozilla” zostało zachowane jako opcja, aktywowana podczas uruchamiania z zmienną środowiskową „MOZ_LEGACY_HOME=1”.
- Dodano wsparcie dla mechanizmu „Compression Dictionary Transport” (RFC 9842), który pozwala na zmniejszenie rozmiaru danych przesyłanych między klientem a serwerem, poprzez wykorzystanie algorytmów kompresji Zstandard (Content-Encoding: dcz) oraz Brotli (Content-Encoding: dcb) w połączeniu z kompresją typowych struktur przy użyciu słowników. Dostępne są dwa scenariusze użycia Compression Dictionary Transport — kompresja treści na podstawie wcześniej przesłanych przez serwer słowników oraz użycie wcześniej przesłanej treści jako słownika do kompresji jej nowej wersji (kompresja delta, w której przesyłane są tylko zmiany w porównaniu z istniejącą wersją).
Na przykład, przy żądaniu „GET /index.html” serwer może przesłać informacje o dostępności słownika, zwracając ścieżkę do niego w nagłówku ‘Link: ; rel=„compression-dictionary”‘. Podczas ładowania słownika „…/dict” przez klienta, serwer przekaże informacje o jego zastosowaniu do plików HTML, ustawiając nagłówek ‘Use-As-Dictionary: match=„/*html”‘. Przy następnym żądaniu zasobu html, na przykład „GET /index2.html”, klient wskaże informacje o dostępności słownika poprzez nagłówek ‘Available-Dictionary: hash_słownika’‘. Jeśli serwer ma po swojej stronie słownik o danym hashu, zwróci zawartość index2.html skompresowaną za pomocą tego słownika.
Do kompresji delta różnych wersji plików JavaScript w odpowiedzi na żądanie „GET /app.v1.js” serwer może ustawić nagłówek ‘Use-As-Dictionary: match=„/app*js”‘, informując, że zwrócona zawartość może być użyta jako słownik dla ścieżek „/app*js”. Przy następnym żądaniu pliku odpowiadającego tej masce, na przykład „GET /app.v2.js”, klient przekaże hash istniejącego słownika poprzez nagłówek „Available-Dictionary:”, a serwer zwróci tylko zmiany między plikami app.v1.js a app.v2.js.
- Dodano stronę about:keyboard do konfiguracji kombinacji klawiszy i nadpisywania istniejących skrótów klawiszowych, na przykład, aby ustawić bardziej znajome dla siebie opcje lub wykluczyć konflikty z innymi programami.

- Optymalizowano odtwarzanie wideo z wykorzystaniem sprzętowego przyspieszenia dekodowania na GPU AMD. Na systemach z GPU AMD sprzętowo dekodowane wideo teraz odtwarzane jest bez dodatkowego kopiowania danych (tryb zero-copy), tak jak wcześniej realizowano to dla systemów z GPU Intel i NVIDIA.
- Dla wersji 5 zaktualizowano realizację protokołu Safe Browsing, stosowanego do sprawdzania adresów URL pod kątem obecności na listach niebezpiecznych zasobów (strony phishingowe, strony z złośliwym oprogramowaniem itp.), które są dostarczane przez Google. Nowa wersja protokołu pozwala na pobieranie list blokad do używania na lokalnym systemie (baza danych z prefiksami hashy SHA256 problematycznych URL), które są teraz stosowane w Firefoxie.
- Dodano ustawienie automatycznego kontynuowania odtwarzania wideo w trybie „obraz w obrazie” po przełączeniu karty.
- W trybie wzmożonej ochrony przed śledzeniem (ETP, Enhanced Tracking Protection => Strict) domyślnie włączono zastosowanie specyfikacji LNA (Local Network Access) w celu ograniczenia dostępu do lokalnego systemu (loopback, 127.0.0.0/8) lub sieci wewnętrznej (192.168.0.0/16, 10.0.0.0/8 itd.) podczas interakcji z publicznymi witrynami. Dostęp do wewnętrznych zasobów jest wykorzystywany przez przestępców do przeprowadzania ataków CSRF na routery, punkty dostępu, drukarki, korporacyjne interfejsy webowe i inne urządzenia oraz usługi, które przyjmują żądania tylko z sieci lokalnej. Dodatkowo skanowanie wewnętrznych zasobów może być używane do pośredniej identyfikacji lub zbierania informacji o sieci lokalnej.
- Na systemach Linuх z GNOME i serwerem kompozycyjnym Mutter rozwiązano problem z nieostrym wyświetlaniem treści przy użyciu ułamkowego poziomu skalowania.
- Na komputerach Apple z chipami Apple Silicon i systemem macOS włączono wsparcie dla API WebGPU.
- Priorytety wyboru języka (parametry q) przedstawiane w nagłówku HTTP Accept-Language są synchronizowane z wartościami stosowanymi w innych przeglądarkach, co rozwiązało niektóre problemy z przenośnością. Na przykład dla drugiego języka teraz priorytet wynosi q=0.9 zamiast q=0.5, a dla każdego kolejnego języka priorytet zmniejsza się o 0.1.
- Biblioteka ICU została zaktualizowana do wersji 78 z obsługą Unicode 17 i danymi lokalizacji.
- W Service Workerach zezwolono na użycie modułów JavaScript ESM (ECMAScript Module), importowanych i eksportowanych przez wyrażenia import i export.
- Dodano wsparcie dla specyfikacji CSS Module Scripts, umożliwiającej użycie systemu modułów JavaScript do importowania zasobów CSS. Na przykład: import styles from „./styles.css” with { type: „css” };
- W pseudo-elemencie „::marker”, który umożliwia dostosowanie parametrów numerów i punktów dla wypunktowań w blokach
- i
- , zezwolono na użycie właściwości CSS „counter-*” oraz „quotes”.
- W API CompressionStream i DecompressionStream dodano wsparcie dla formatu kompresji Brotli.
- W API View Transitions, stosowanym do tworzenia efektów animacyjnych przy przełączaniu między różnymi stanami DOM, dodano właściwość „type”, zawierającą tablicę typów przejść. Dodano również odpowiadający CSS selektor „:active-view-transition-type” oraz właściwość document.activeViewTransition, zwracającą instancję aktywnego obiektu ViewTransition dla dokumentu.
- Włączono zestaw właściwości CSS do zarządzania wyświetlaniem elementów, związanych z położeniem innych elementów (CSS Anchor Positioning), bez użycia JavaScript, na przykład do przyczepiania do elementów okienek podręcznych (popover), pojawiających się na wzór podpowiedzi.
- Wdrożono specyfikację „Storage Access Headers”, definiującą nagłówek żądania „Sec-Fetch-Storage-Access” oraz nagłówek odpowiedzi „Activate-Storage-Access” w celu uzyskania dostępu do zewnętrznych plików cookie bez wywoływania metody document.requestStorageAccess(). Serwer może żądać dostępu do plików cookie za pomocą nagłówka „Activate-Storage-Access”, a klient go wyśle, jeśli wcześniej użytkownik potwierdził udzielenie dostępu do pamięci cookie za pomocą API Storage Access.
- W właściwości CSS „root-font-relative” dodano wsparcie dla względnych jednostek miary rcap, rch, rex i ric.
- Zrealizowano API Navigation, które pozwala aplikacjom webowym przechwytywać operacje nawigacji w oknie, inicjować przejścia i analizować historię działań z aplikacją. API oferuje alternatywę dla właściwości window.history i window.location, zoptymalizowaną dla jednoskalowych aplikacji webowych.
- W narzędziach dla web-developerów w panelu z regułami CSS wprowadzono obsługę edytowania i dodawania selektorów pseudo-elementów. Do interfejsu przeglądarki danych w formacie JSON dodano przycisk do importowania zasobu do systemu profilowania (Firefox Profiler) w celu określenia informacji o jego rozmiarze. W panelach inspekcji elementów HTML i animacji zapewniono wyświetlanie pseudo-elementów View Transitions. W panelu z regułami CSS wdrożono wyświetlanie reguł @position-try, stosowanych do zarządzania wyświetlaniem elementów powiązanych z lokalizacją innych elementów (CSS Anchor Positioning).
- W wersji Firefox dla Androida dodano ochronę przed atakami przez zewnętrzne kanały, takie jak Spectre, które są stosowane do omijania izolacji między stronami. Wcześniej podobna ochrona była dostępna tylko w wersjach dla systemów desktopowych.
Oprócz nowości i poprawek błędów w Firefox 147 usunięto 23 podatności. 10 podatności wynikało z problemów związanych z pamięcią, takich jak przepełnienia buforów i odwołania do już zwolnionych obszarów pamięci. Potencjalnie problemy te mogą prowadzić do wykonania kodu przez złośliwców po otwarciu specjalnie przygotowanych stron. 3 podatności pozwalają na ominięcie izolacji sandboxa z powodu niepoprawnej weryfikacji granic i całkowitego przepełnienia w komponencie do pracy z grafiką.
Źródło: opennet.ru

