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 mostrou sinais de fraqueza 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

Remover 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 criptografias no modo CBC ainda sejam amplamente usadas com o RSA, elas são praticamente inexistentes com o 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 criptografias com base 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 criptografias com base em AEAD não só melhoram 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 rápidas de software. 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 acionam 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, a rolagem de toque também não deverá ser. 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.

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

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 vamos usar. 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 uso de scripts inválidos para dar ping em servidores é abordado adequadamente pela API sendBeacon.

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

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

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 a nenhuma API, 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);
      }
    };

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

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

Com a diretiva referrer da CSP, os proprietários de sites podiam definir uma política de referenciador a partir de 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.

Intenção de remover | Rastreador Chromestatus | Bug do Chromium

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