O teste de descontinuação do acesso à rede privada (PNA, na sigla em inglês) para contextos não seguros está terminando. Implemente o prompt de permissão do PNA

Yifan Luo
Yifan Luo

O Chrome 124 inclui o recurso de permissão de acesso à rede privada para relaxar conteúdo misto. Há um teste de descontinuação em andamento para sites que precisam de mais tempo para se preparar para essa mudança. No entanto, esse teste termina com o Chrome 132, que deve ser lançado em 4 de fevereiro de 2025. Esta postagem explica a mudança, mais sobre o design do recurso, como migrar seus sites atuais e como testar a implementação.

O que vai mudar?

Para estabelecer conexões com dispositivos em uma rede privada que não têm nomes globalmente exclusivos e, portanto, não podem receber certificados TLS, esse recurso introduz uma nova opção para fetch(), que declara a intenção dos desenvolvedores de se comunicar com esse dispositivo. Isso inclui um novo recurso controlado por política para restringir o acesso de cada site a esse recurso e novos cabeçalhos para a resposta de pré-vôo do servidor para fornecer mais metadados.

O que é o acesso à rede particular?

O Acesso de rede particular (PNA, anteriormente conhecido como CORS-RFC1918 e resumidamente como "Acesso de rede local") é um recurso de segurança que restringe a capacidade de sites de enviar solicitações a servidores em redes particulares. Isso ajuda a proteger os usuários e as redes internas contra possíveis ataques, como falsificação de solicitações entre sites (CSRF). O Chrome vem implementando a PNA gradualmente, e a proteção será ampliada nas próximas versões.

Por que é necessário um aviso de permissão?

O Chrome 94 introduziu um bloqueio ao acesso a redes privadas de sites públicos não seguros. O teste de descontinuação do acesso de rede particular em contextos não seguros revelou desafios na migração de sites afetados para HTTPS. Uma preocupação comum é a dificuldade de migrar dispositivos particulares para HTTPS, o que leva a violações de verificação de conteúdo misto.

Para resolver esse problema, uma nova solicitação de permissão foi adicionada em um teste de origem do Chrome 120 e na versão estável do Chrome 124.

Quando é necessário uma solicitação de permissão?

Planejamos encerrar o teste de descontinuação de contextos não seguros alguns marcos depois que o recurso de solicitação de permissão ficou disponível. Para garantir a compatibilidade, você precisa migrar seus sites públicos para HTTPS. Se não for possível migrar seu servidor privado para HTTPS, o novo recurso de solicitação de permissão vai permitir que você relaxe as verificações de conteúdo misto.

Veja a seguir um fluxo de trabalho típico para uma solicitação de acesso à rede privada com solicitação de permissão.

Acionar o prompt de permissão

Adicione o novo atributo targetAddressSpace como uma opção de busca para que a solicitação pule a verificação de conteúdo misto.

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

De acordo com o Acesso à rede privada: introdução de simulações, qualquer solicitação de rede privada é precedida por uma solicitação de simulação. Essa solicitação de simulação vai incluir um novo cabeçalho, Access-Control-Request-Private-Network: true, e a resposta correspondente precisa incluir o cabeçalho Access-Control-Allow-Private-Network: true.

Para acomodar a nova solicitação de permissão, os dispositivos precisam incorporar dois novos cabeçalhos de resposta: Private-Network-Access-Name e Private-Network-Access-ID.

  • Private-Network-Access-ID: um valor de 48 bits apresentado como 6 bytes hexadecimais separados por dois-pontos.
  • Private-Network-Access-Name: um nome válido como uma string que corresponde à expressão regular ECMAScript /^[a-z0-9_-.]+$/.. O comprimento máximo do nome é de 248 unidades de código UTF-8.
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

Demonstração

Confira a demonstração em: https://private-network-access-permission-test.glitch.me/.

É necessário iniciar o servidor particular pessoal para usar o site de demonstração. O servidor privado precisa responder com o cabeçalho HTTP Access-Control-Allow-Private-Network: true, junto com os cabeçalhos especificados Private-Network-Access-ID e Private-Network-Access-Name. Se tudo estiver configurado corretamente, o seguinte aviso de permissão será mostrado:

Sair do teste de descontinuação do contexto não seguro

Para sites que registraram o teste de descontinuação do acesso de rede particular para contextos não seguros, é hora de migrar seu site com nosso novo aviso de permissão e sair do teste agora.

Depois de atualizar o código, exclua o token de teste nos cabeçalhos HTML, JavaScript ou HTTP. Se você não lembra onde colocou o token de teste, consulte a seção Registrar-se para o teste de descontinuação na postagem anterior do blog.

Também é possível excluir o token na página do teste.

A seguir

A solução para solicitações de fetch() que não são de API ainda está em análise.

Várias soluções foram testadas, por exemplo, usando service workers ou definindo o espaço de endereço de destino como uma nova Content-Security-Policy. No entanto, a forma final das solicitações de fetch() que não são de API ainda está em investigação.

As solicitações de subframes podem receber suporte com a política de permissão no futuro.

No futuro, talvez seja necessário oferecer suporte a políticas de permissão para relaxar a capacidade de subframes.

Feedback para casos de uso de rede privada

Se você hospeda um site em uma rede privada que precisa de solicitações de redes públicas, a equipe do Chrome quer seu feedback. Registre um problema no Issue Tracker do Chromium (componente: Blink>SecurityFeature>CORS>PrivateNetworkAccess) ou no repositório do GitHub.

Recursos