Wycofania i usuwania interfejsów API w Chrome 56

Jan Kowalski
Joe Medley

W niemal każdej wersji Chrome obserwujemy znaczną liczbę aktualizacji i ulepszeń produktu, jego wydajności, a także możliwości platformy internetowej. W tym artykule opisujemy wycofywanie i usuwanie przeglądarki Chrome 56, która od 8 grudnia znajduje się w wersji beta. Ta lista może się w każdej chwili zmienić.

Usunięcie obsługi certyfikatów SHA-1

Algorytm szyfrowania kryptograficznego SHA-1 po raz pierwszy wykazał oznaki słabości ponad 11 lat temu, a ostatnie badania wskazują na bezpośrednie ryzyko ataków, które mogą bezpośrednio wpływać na integralność infrastruktury internetowych kluczy publicznych (PKI).

Aby chronić użytkowników przed takimi atakami, Chrome nie obsługuje już certyfikatów SHA-1 od wersji Chrome 56, której stabilna wersja została udostępniona w styczniu 2017 roku. Gdy wejdziesz na stronę korzystającą z takiego certyfikatu, wyświetli się ostrzeżenie pełnoekranowe. Więcej informacji znajdziesz na blogu o bezpieczeństwie Chrome.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usunięcie mechanizmów szyfrowania ECDSA w trybie CBC w protokole TLS

W protokole TLS konstrukcja w trybie CBC jest wadliwa, co powoduje, że jest ona niestabilna i bardzo trudno ją wdrożyć w bezpieczny sposób. Chociaż szyfry w trybie CBC są nadal powszechnie stosowane w RSA, w przypadku ECDSA praktycznie ich nie ma. Inne przeglądarki nadal obsługują te szyfry, naszym zdaniem ryzyko jest niewielkie. Poza tym ECDSA w protokole TLS jest używane przez niewiele organizacji i zwykle ma bardziej złożoną konfigurację (niektórzy starsi klienci obsługują tylko RSA), więc oczekujemy, że witryny ECDSA będą lepiej obsługiwane i łatwiejsze w razie problemów.

W protokole TLS 1.2 zostały dodane nowe mechanizmy szyfrowania oparte na AEAD, które pozwalają uniknąć tych problemów, w szczególności AES_128_GCM, AES_256_GCM lub CHACHA20_POLY1305. Choć obecnie wymagamy tego tylko w przypadku witryn opartych na ECDSA, jest to zalecane dla wszystkich administratorów. Mechanizmy szyfrujące oparte na AEAD zwiększają nie tylko bezpieczeństwo, ale też wydajność. AES-GCM zapewnia wsparcie sprzętowe w przypadku najnowszych procesorów, a ChaCha20-Poly1305 umożliwia szybkie wdrażanie oprogramowania. Tymczasem szyfry CBC wymagają powolnych złożonych działań łagodzących i dostępu PRNG do każdego rekordu wychodzącego. Stosowanie szyfrów opartych na AEAD jest też konieczne w przypadku optymalizacji HTTP/2 i False Start.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usuń gesty użytkownika z przewijania dotykiem

Widzieliśmy wiele przykładów źle napisanych lub szkodliwych reklam, które uruchamiają nawigację podczas przewijania dotykiem w przypadku zdarzeń touchstart lub wszystkich zdarzeń touchend. Jeśli zdarzenie kółka nie może otworzyć wyskakującego okienka, przewijanie dotykiem również nie powinno. Może to spowodować błędy w niektórych sytuacjach, np. gdy multimedia nie są odtwarzane po dotknięciu lub wyskakujące okienka nie otwierają się po dotknięciu. Już w tych sytuacjach Safari nie otwiera wyskakujących okienek.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Nie zezwalaj na żadne pobieranie skryptów z nieprawidłowymi atrybutami typu/języka

Obecnie skaner wstępnego wczytywania Chrome pobiera elementy w elementach <scripts> niezależnie od wartości atrybutu type czy language, chociaż skrypt nie zostanie wykonany podczas analizy. Po wycofaniu pobierania skaner wstępnego wczytywania i parser będą mieć taką samą semantykę i nie będziemy inicjować pobierania skryptów, których nie będziemy używać. Ma to na celu zaoszczędzenie danych użytkowników, którzy odwiedzają witryny z wieloma niestandardowymi tagami skryptu, które są już przetworzone (np. type="text/template").

Przypadek użycia nieprawidłowych skryptów do serwerów ping został dokładnie opisany w interfejsie sendBeacon API.

W ramach tej zmiany Chrome i Safari są dopasowywane do Safari, choć Firefox nadal żąda skryptów niezależnie od typu czy języka.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usunięcie MediaStreamTrack.getSources()

Ta metoda nie jest już częścią specyfikacji i nie jest obsługiwana przez żadne inne poważniejsze przeglądarki. Zastąpiła ją wersja MediaDevices.enumerateDevices(), która od wersji 47 obsługuje bez flag bez flag i jest również obsługiwana w innych przeglądarkach. Przykład poniżej. Ta hipotetyczna funkcja getCameras() najpierw używa wykrywania cech, aby znaleźć i użyć funkcji enumerateDevices(). Jeśli nie uda się wykryć funkcji, szuka ona getSources() w tabeli MediaStreamTrack. Jeśli interfejsy API nie są obsługiwane, zwraca pustą tablicę cameras.

    function getCameras(camerasCallback) {
      var cameras = [];
      if('enumerateDevices' in navigator.mediaDevices) {
         navigator.mediaDevices.enumerateDevices()
          .then(function(sources) {
            return sources.filter(function(source) { 
              return source.kind == 'videoinput' 
            });
          })
          .then(function(sources) {
            sources.forEach(function(source) {
              if(source.label.indexOf('facing back') >= 0) {
                // move front facing to the front.
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            });
            camerasCallback(cameras);
          });
      }
      else if('getSources' in MediaStreamTrack) {
        MediaStreamTrack.getSources(function(sources) {

          for(var i = 0; i < sources.length; i++) {
            var source = sources[i];
            if(source.kind === 'video') {

              if(source.facing === 'environment') {
                // cameras facing the environment are pushed to the front of the page
                cameras.unshift(source);
              }
              else {
                cameras.push(source);
              }
            }
          }
          camerasCallback(cameras);
        });
      }
      else {
        // We can't pick the correct camera because the API doesn't support it.
        camerasCallback(cameras);
      }
    };

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usuń dyrektywę CSP odzwierciedlonej xss

Wcześniejsze wersje specyfikacji Content Security Policy Level 2 zawierały dyrektywę reflected-xss, która nie oferowała nic więcej niż nagłówek X-XSS-Protection, poza inną składnią. Ta dyrektywa została usunięta ze specyfikacji w 2015 roku, ale dopiero po wdrożeniu w Chrome. Dyrektywa nie będzie już obsługiwana.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Zastąp dyrektywę CSP „referrer”

Dyrektywa CSP referrer umożliwia właścicielom witryn ustawianie zasady dotyczącej stron odsyłających z poziomu nagłówka HTTP. Ta funkcja nie tylko jest bardzo rzadko używana, ale nie jest już częścią specyfikacji W3C.

Witryny, które nadal potrzebują tej funkcji, powinny używać atrybutu <meta name="referrer"> lub nowego nagłówka Refererrer-Policy.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium

Usuń pole PaymentAddress.careOf

Interfejs PaymentAddress zawiera pole careOf, które jest niestandardowe (żadne znane standardy adresów go nie obsługują). Pole careOf jest też niepotrzebne, ponieważ pola odbiorcy i organizacji w wystarczającym stopniu obsługują wszystkie niezbędne przypadki użycia. Dodanie atrybutu careOf stwarza istotne problemy w zakresie interoperacyjności z istniejącymi schematami adresów pocztowych i interfejsami API. Aby dowiedzieć się więcej, przeczytaj propozycję usunięcia specyfikacji na GitHubie.

Intencja usunięcia | Błąd Chromium

Usuwanie SVGViewElement.viewTarget

Atrybut SVGViewElement.viewTarget nie jest częścią specyfikacji SVG2.0 i jest używany w niewielkim stopniu lub w ogóle nie istnieje. Ten atrybut został wycofany w Chrome 54 i teraz usunięty.

Intencja usunięcia | Narzędzie do śledzenia stanu Chrome | Błąd Chromium