Устаревшие и удаленные API в Chrome 56

Джо Медли
Joe Medley

Почти в каждой версии Chrome мы видим значительное количество обновлений и улучшений продукта, его производительности, а также возможностей веб-платформы. В этой статье описаны устаревания и удаления в Chrome 56, бета-версия которого доступна с 8 декабря. Этот список может быть изменен в любое время.

Удалить поддержку сертификатов SHA-1.

Криптографический алгоритм хеширования SHA-1 впервые продемонстрировал признаки слабости более одиннадцати лет назад, и недавние исследования указывают на неизбежную возможность атак, которые могут напрямую повлиять на целостность инфраструктуры открытых ключей сети (PKI).

Чтобы защитить пользователей от таких атак, Chrome больше не поддерживает сертификаты SHA-1, начиная с Chrome 56, стабильный выпуск которого запланирован на январь 2017 года. Посещение сайта с использованием такого сертификата приводит к появлению межстраничного предупреждения. Более подробную информацию мы предоставляем в блоге Chrome Security Blog .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удаление шифров ECDSA в режиме CBC в TLS

Конструкция режима CBC TLS имеет недостатки, что делает ее хрупкой и очень сложной для безопасной реализации. Хотя шифры в режиме CBC по-прежнему широко используются в RSA, в ECDSA они практически отсутствуют. Другие браузеры по-прежнему поддерживают эти шифры, поэтому мы считаем, что риск невелик. Кроме того, ECDSA в TLS используется немногими организациями и обычно имеет более сложную настройку (некоторые старые клиенты поддерживают только RSA), поэтому мы ожидаем, что сайты ECDSA будут лучше обслуживаться и более оперативно реагировать в случае проблем.

В TLS 1.2 добавлены новые шифры на основе AEAD , позволяющие избежать этих проблем, в частности AES_128_GCM, AES_256_GCM или CHACHA20_POLY1305. Хотя в настоящее время мы требуем это только для сайтов на основе ECDSA, это рекомендуется для всех администраторов. Шифры на основе AEAD не только повышают безопасность, но и производительность. AES-GCM имеет аппаратную поддержку на последних процессорах, а ChaCha20-Poly1305 допускает быструю программную реализацию. Между тем, шифры CBC требуют медленных сложных мер по смягчению последствий и доступа к PRNG для каждой исходящей записи. Шифры на основе AEAD также являются обязательным условием для оптимизации HTTP/2 и ложного запуска.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить пользовательские жесты из сенсорной прокрутки

Мы видели множество примеров плохо написанных или вредоносных объявлений, которые запускают навигацию для сенсорной прокрутки либо при touchstart , либо при всех событиях touchend . Если событие «колесо» не может открыть всплывающее окно, то и сенсорная прокрутка тоже не должна. Это может привести к поломке некоторых сценариев, например, когда медиафайлы не воспроизводятся при касании или всплывающие окна не открываются при касании. Safari уже молча не может открыть всплывающие окна во всех этих сценариях.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Запретить все выборки для скриптов с недопустимыми атрибутами типа/языка.

В настоящее время сканер предварительной загрузки Chrome извлекает элементы в элементах <scripts> независимо от значения атрибута type или language , хотя скрипт не будет выполнен при анализе. При отмене выборки сканер предварительной загрузки и анализатор будут иметь одинаковую семантику, и мы не будем инициировать выборку для скриптов, которые не будем использовать. Это предназначено для сохранения данных пользователей, которые переходят на сайты с множеством пользовательских тегов скриптов, которые подвергаются постобработке (например, type="text/template" ).

Вариант использования недопустимых скриптов для проверки связи с серверами адекватно описан в sendBeacon API .

Это изменение выравнивает Chrome с Safari, хотя Firefox по-прежнему запрашивает сценарии независимо от их типа и языка.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить MediaStreamTrack.getSources()

Этот метод больше не является частью спецификации и не поддерживается ни одним другим крупным браузером. Он был заменен MediaDevices.enumerateDevices() , который Blink поддерживает без флагов с версии 47 и который также поддерживается другими браузерами. Пример этого показан ниже. Эта гипотетическая функция getCameras() сначала использует обнаружение функций для поиска и использования enumerateDevices() . Если обнаружение функции не удалось, выполняется поиск getSources() в MediaStreamTrack . Наконец, если нет какой-либо поддержки API, верните пустой массив 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);
      }
    };

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить директиву CSP отраженного-xss

Ранние проекты спецификации Content Security Policy Level 2 содержали директиву reflected-xss , которая предлагала не что иное, как заголовок X-XSS-Protection , кроме другого синтаксиса. Эта директива была удалена из спецификации в 2015 году, но не раньше, чем она была реализована в Chrome. Поддержка этой директивы сейчас удалена.

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Заменить директиву реферера CSP

Директива referrer CSP позволяла владельцам сайтов устанавливать политику реферера из заголовка HTTP. Эта функция не только используется очень редко , но и больше не является частью какой-либо спецификации W3C.

Сайты, которым по-прежнему нужна эта функция, должны использовать <meta name="referrer"> или новый заголовок Referrer-Policy .

Намерение удалить | Трекер Chromestatus | Ошибка хрома

Удалить поле PaymentAddress.careOf

Интерфейс PaymentAddress имеет нестандартное поле careOf (его не поддерживают никакие известные стандарты адресов). Поле careOf также не является необходимым, поля получателя и организации достаточно поддерживают все необходимые варианты использования. Добавление careOf создает серьезные проблемы с точки зрения совместимости с существующими схемами почтовых адресов и API. Для более подробного обсуждения прочитайте предложение по удалению спецификации на GitHub.

Намерение удалить | Ошибка хрома

Удалить SVGViewElement.viewTarget

Атрибут SVGViewElement.viewTarget не является частью спецификации SVG2.0, и его использование невелико или вообще отсутствует. Этот атрибут устарел в Chrome 54 и теперь удален.

Намерение удалить | Трекер Chromestatus | Ошибка хрома