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

Joe medley
Joe Medley

Em quase todas as versões do Chrome, vemos um número significativo de atualizações e melhorias no produto, no desempenho dele e também nos recursos da plataforma da Web. Neste artigo, descrevemos as descontinuações e remoções do Chrome 56, que está na versão Beta desde 8 de dezembro. Essa lista está sujeita a alterações a qualquer momento.

Remover o suporte a certificados SHA-1

O algoritmo de hash criptográfico SHA-1 mostrou pela primeira vez sinais de fraqueza há mais de onze anos. Uma pesquisa recente indica a possibilidade iminente de ataques que poderiam afetar diretamente a integridade da infraestrutura de chave pública (ICP) da Web.

Para proteger os usuários contra esses ataques, o Chrome não oferece mais suporte aos certificados SHA-1 a partir do Chrome 56, com versão estável em janeiro de 2017. Acessar um site usando esse certificado resulta em um aviso intersticial. Confira mais detalhes no Blog de segurança do Chrome (em inglês).

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

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 implementar com segurança. As criptografias no modo CBC ainda são amplamente usadas com RSA, mas são praticamente inexistentes no ECDSA. Outros navegadores ainda são compatíveis com essas criptografias, mas 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ão compatíveis apenas com RSA). Por isso, esperamos que os sites ECDSA sejam mais bem mantidos e mais responsivos em caso de problemas.

O TLS 1.2 adicionou novas criptografias com base em AEADs que evita esses problemas, especificamente AES_128_GCM, AES_256_GCM ou CHACHA20_POLY1305. No momento, essa opção é obrigatória apenas para sites com base em ECDSA, mas é recomendado para todos os administradores. As criptografias baseadas em AEAD não apenas melhoram a segurança, mas também o desempenho. O AES-GCM oferece suporte de hardware em CPUs recentes, e ChaCha20-Poly1305 permite implementações rápidas de software. Enquanto isso, as criptografias CBC exigem mitigações complexas lentas e acesso PRNG em cada registro de saída. As criptografias baseadas em AEAD também são um pré-requisito para otimizações HTTP/2 e de início falso.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Remover gestos do usuário da rolagem por toque

Já vimos vários exemplos de anúncios mal escritos ou mal-intencionados que acionam a navegação para rolagens por toque em touchstart ou em todos os eventos touchend. Se um evento "wheel" não puder abrir um pop-up, a rolagem por toque também não vai funcionar. Isso pode causar falhas em alguns cenários, como a mídia não ser reproduzida com o toque ou os pop-ups não abrirem com o toque. O Safari já não abre pop-ups silenciosamente em todos esses cenários.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Não permitir todas as buscas de scripts com atributos de tipo/idioma inválidos

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

A API sendBeacon aborda adequadamente o caso de uso de scripts inválidos em servidores de ping.

Essa mudança alinha o Chrome ao Safari, mas o Firefox ainda solicita scripts, independentemente do tipo ou idioma.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

MediaStreamTrack.getSources() foi removido.

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

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

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Remoção da diretiva da CSP refletida-xss

Os primeiros rascunhos da especificação de nível 2 da política de segurança de conteúdo continham uma diretiva reflected-xss que oferecia apenas o cabeçalho X-XSS-Protection, com uma sintaxe diferente. Essa diretiva foi removida da especificação em 2015, mas não antes de ser implementada no Chrome. O suporte para essa diretiva está sendo removido.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Substituir diretiva "referrer" da CSP

A diretiva referrer da CSP permitiu que os proprietários do site definam uma política do referenciador a partir de um cabeçalho HTTP. Esse recurso não só tem um uso muito baixo, como 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 da política do referenciador.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Remover o campo PaymentAddress.careOf

A interface PaymentAddress tem um campo careOf que não é padrão. Nenhum padrão de endereço conhecido é compatível com ele. O campo careOf também não é necessário, os campos de destinatário e organização oferecem suporte suficiente a todos os casos de uso necessários. Adicionar careOf representa problemas significativos em termos de interoperabilidade com os esquemas de endereços postais e APIs atuais. Para uma discussão mais completa, leia a proposta de remoção de especificações (link em inglês) no GitHub.

Intenção de remoção | Bug do Chromium

SVGViewElement.viewTarget foi removido.

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

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium