Descontinuações e remoções de APIs no Chrome 56

Joe Medley
Joe Medley

Em quase todas as versões do Chrome, observamos um número significativo de atualizações e melhorias no produto, no desempenho e nos recursos da plataforma da Web. Este artigo descreve as suspensões de uso e remoções no Chrome 56, que está na versão Beta desde 8 de dezembro. Essa lista está sujeita a mudanças a qualquer momento.

Remover o suporte a certificados SHA-1

O algoritmo hash criptográfico SHA-1 apresentou sinais de vulnerabilidade pela primeira vez há mais de 11 anos, e pesquisas recentes apontam para a possibilidade iminente de ataques que poderiam afetar diretamente a integridade da infraestrutura de chave pública (PKI) da Web.

Para proteger os usuários contra esses ataques, o Chrome não oferece mais suporte a certificados SHA-1 a partir da versão 56, que foi lançada em janeiro de 2017. A visita a um site com esse certificado resulta em um aviso intersticial. Confira mais detalhes no blog de segurança do Chrome.

Intent to remove | Chromestatus Tracker | Chromium Bug

Remoção de criptografias ECDSA no modo CBC no TLS

A construção do modo CBC do TLS tem falhas, o que a torna frágil e muito difícil de ser implementada com segurança. Embora as cifras no modo CBC ainda sejam amplamente usadas com RSA, elas são praticamente inexistentes com ECDSA. Outros navegadores ainda oferecem suporte a essas cifras. Acreditamos que o risco é baixo. Além disso, o ECDSA no TLS é usado por poucas organizações e geralmente com uma configuração mais complexa (alguns clientes mais antigos só oferecem suporte ao RSA). Portanto, esperamos que os sites ECDSA sejam melhor mantidos e mais responsivos em caso de problemas.

O TLS 1.2 adicionou novas cifras baseadas em AEADs que evitam esses problemas, especificamente AES_128_GCM, AES_256_GCM ou CHACHA20_POLY1305. Embora, no momento, exijamos isso apenas para sites baseados em ECDSA, recomendamos que todos os administradores façam isso. As cifras baseadas em AEAD não melhoram apenas a segurança, mas também o desempenho. O AES-GCM tem suporte de hardware em CPUs recentes e o ChaCha20-Poly1305 aceita implementações de software rápidas. Enquanto isso, as cifras CBC exigem mitigações complexas lentas e acesso a PRNG em cada registro de saída. As cifras baseadas em AEAD também são um pré-requisito para otimizações de HTTP/2 e False Start.

Intent to remove | Chromestatus Tracker | Chromium Bug

Remover gestos do usuário do rolagem por toque

Vimos vários exemplos de anúncios mal escritos ou maliciosos que acionavam a navegação para rolagens por toque em touchstart ou em todos os eventos touchend. Se um evento de "roda" não puder abrir um pop-up, o rolagem por toque também não poderá. Isso pode quebrar alguns cenários, por exemplo, a mídia não é reproduzida por toque ou os pop-ups não são abertos por toque. O Safari já falha em abrir pop-ups em todos esses cenários.

Intent to remove | Chromestatus Tracker | Chromium Bug

Proibir todas as transferências de scripts com atributos de tipo/idioma inválidos

No momento, o scanner de pré-carregamento do Chrome busca itens em elementos <scripts>, independente do valor do atributo type ou language, embora o script não seja executado quando analisado. Ao descontinuar a busca, o scanner de pré-carregamento e o analisador terão a mesma semântica, e não iniciaremos buscas para scripts que não serão usados. O objetivo é salvar dados de usuários que navegam para sites com muitas tags de script personalizadas que são pós-processadas (como type="text/template", por exemplo).

O caso de uso de scripts inválidos para ping de servidores é coberto adequadamente pela API sendBeacon.

Essa mudança alinha o Chrome ao Safari, embora o Firefox ainda solicite scripts independente do tipo ou idioma.

Intent to remove | Chromestatus Tracker | Chromium Bug

Remoção de MediaStreamTrack.getSources()

Esse método não faz mais parte da especificação e não é compatível com nenhum outro navegador importante. Ele foi substituído por MediaDevices.enumerateDevices(), que o Blink oferece suporte sem flags desde a versão 47 e também é compatível com outros navegadores. Confira um exemplo abaixo. Essa função hipotética getCameras() usa primeiro a detecção de recursos para encontrar e usar enumerateDevices(). Se a detecção de recursos falhar, ela vai procurar getSources() em MediaStreamTrack. Por fim, se não houver suporte para a API de qualquer tipo, retorne a matriz cameras vazia.

    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);
      }
    };

Intent to remove | Chromestatus Tracker | Chromium Bug

Remover a diretiva CSP reflected-xss

Os primeiros rascunhos da especificação da Política de Segurança de Conteúdo do Nível 2 contiam uma diretiva reflected-xss que oferecia apenas o cabeçalho X-XSS-Protection, além de uma sintaxe diferente. Essa diretiva foi removida da especificação em 2015, mas não antes de ser implementada no Chrome. O suporte a essa diretiva está sendo removido.

Intent to remove | Chromestatus Tracker | Chromium Bug

Substituir a diretiva "referrer" da CSP

A diretiva referrer da CSP permitia que os proprietários de sites definissem uma política de referenciadores em um cabeçalho HTTP. Além de ter uso muito baixo, esse recurso também não faz mais parte de nenhuma especificação do W3C.

Os sites que ainda precisam dessa funcionalidade precisam usar <meta name="referrer"> ou o novo cabeçalho Referrer-Policy.

Intent to remove | Chromestatus Tracker | Chromium Bug

Remoção do campo PaymentAddress.careOf

A interface PaymentAddress tem um campo careOf que não é padrão (nenhum padrão de endereço conhecido oferece suporte a ele). O campo careOf também não é necessário. Os campos de destinatário e organização oferecem suporte suficiente para todos os casos de uso necessários. A adição de careOf causa problemas significativos em termos de interoperabilidade com APIs e esquemas de endereço postal atuais. Para uma discussão mais completa, leia a proposta de remoção de especificação no GitHub.

Intent to remove | Bug do Chromium

Remover SVGViewElement.viewTarget

O atributo SVGViewElement.viewTarget não faz parte da especificação SVG2.0 e seu uso é pequeno ou inexistente. Esse atributo foi descontinuado no Chrome 54 e removido.

Intent to remove | Chromestatus Tracker | Chromium Bug