Declarar permissões e avisar os usuários

A capacidade de uma extensão de acessar sites e a maioria das APIs do Chrome é determinada pelas permissões declaradas. As permissões devem ser restritas apenas ao necessário para a funcionalidade. A limitação de permissões estabelece os recursos de uma extensão e reduz uma possível invasão de dados se a extensão for comprometida por um invasor. Proteja extensões e os usuários delas implementando permissões explícitas, mínimas e opcionais.

Organizar permissões

As permissões são strings conhecidas que se referem a uma API do Chrome ou a padrões de correspondência que concedem acesso a um ou mais hosts. Elas são listadas no manifesto e especificadas como permissões necessárias ou permissões opcionais.

{
  "name": "Permissions Extension",
  ...
  // required permissions
  "permissions": [
    "activeTab",
    "contextMenus",
    "storage"
  ],
  // optional permissions
  "optional_permissions": [
    "topSites",
    "http://www.developer.chrome.com/*"
  ],
      ...
  "manifest_version": 2
}

Limite as permissões necessárias apenas ao necessário para a funcionalidade principal da extensão. Uma extensão não pode solicitar mais permissões do que precisa atualmente. Não se prepare solicitando permissões que possam ser necessárias com atualizações.

As permissões necessárias para recursos opcionais devem ser registradas como permissões opcionais. Isso permite que os usuários decidam quanto acesso eles querem fornecer uma extensão e quais recursos são desejados.

Identificar as permissões necessárias

Uma extensão simples pode precisar solicitar várias permissões, e muitas permissões exibem avisos na instalação. Os usuários são mais propensos a confiar em uma extensão com avisos limitados ou quando as permissões são explicadas a eles.

Avisos de permissão da extensão na instalação

Identifique a funcionalidade principal de uma extensão e quais permissões são necessárias para ela. Considere tornar os recursos opcionais se eles exigirem permissões com avisos.

Acionar permissões opcionais com eventos

A principal funcionalidade da extensão de exemplo de permissões opcionais é substituir a página "Nova guia". Um recurso é exibir a meta do dia do usuário. Esse recurso requer apenas a permissão storage, que não inclui um aviso.

Botão de extensão que ativa recursos adicionais

A extensão tem um recurso adicional, que exibe os principais sites do usuário. Esse recurso requer a permissão topSites, que tem um aviso.

Aviso de extensão da API topSites

O desenvolvimento de recursos que dependem de permissões com avisos como opcionais e a introdução deles de forma orgânica oferece aos usuários uma introdução à extensão sem riscos. Além disso, isso permite que os usuários personalizem ainda mais a experiência com uma extensão e cria uma oportunidade para explicar os avisos.

Substituir a permissão ActiveTab

A permissão activeTab concede acesso temporário ao site em que o usuário está e permite que a extensão use a permissão "tabs" na guia atual. Ele substitui a necessidade de "<all_urls>" em muitos casos e não exibe nenhum aviso na instalação.

Sem a ActiveTab:

Interface de permissões sem ActiveTab

Com a ActiveTab:

interface de permissões com ActiveTab

A permissão activeTab concede a uma extensão acesso temporário à guia ativa no momento quando o usuário invoca a extensão. Se a extensão for comprometida, o invasor vai precisar esperar que o usuário invoque a extensão antes de ter acesso, e esse acesso só vai durar até que a guia seja navegada ou fechada.

Enquanto a permissão activeTab estiver ativada para uma guia, uma extensão poderá:

  • Chame tabs.executeScript ou tabs.insertCSS nessa guia.
  • Receba o URL, o título e o favicon dessa guia por uma API que retorna um objeto tabs.Tab.
  • Intercepte solicitações de rede na guia para a origem do frame principal dela usando a API webRequest. A extensão recebe temporariamente permissões de host para a origem do frame principal da guia.

Os seguintes gestos do usuário ativam o activeTab:

Permissão de acesso

Se uma extensão precisar acessar URLs file:// ou operar no modo de navegação anônima, os usuários precisarão ativar o acesso a esses recursos na página de detalhes da extensão em chrome://extensions.

Permitir URLs de arquivos e o modo de navegação anônima na página de detalhes da extensão

Uma extensão pode detectar se está ativada no modo de navegação anônima chamando extension.isAllowedIncognitoAccess() ou pode ser executada em URLs file:// com extension.isAllowedFileSchemeAccess() .

Noções básicas sobre permissões

Os avisos de permissão descrevem os recursos concedidos por uma API aos usuários da extensão, mas alguns desses avisos podem não ser óbvios no início. Por exemplo, adicionar a permissão "tabs" resulta em um aviso aparentemente não relacionado: a extensão pode ler sua atividade de navegação. Embora a API chrome.tabs possa ser usada apenas para abrir novas guias, ela também pode ser usada para conferir o URL associado a cada guia recém-aberta usando os objetos tabs.Tab.

Sempre que possível, implemente permissões opcionais ou uma API menos eficiente para evitar avisos de alarme.

Como visualizar avisos

Nenhum aviso de permissão vai ser mostrado se uma extensão for carregada como um arquivo descompactado. Para visualizar os avisos de permissão de uma extensão, navegue até chrome://extensions, verifique se o modo de desenvolvedor está ativado e clique em PACOTE EXTENSÃO.

&quot;Modo de desenvolvedor&quot; está marcado, e depois clique em &quot;Compactar extensão&quot;

Especifique o caminho para a pasta da extensão no campo do diretório raiz da extensão e clique no botão Compactar extensão. Ignore o campo Private key para um pacote novo.

Especifique o caminho da extensão e clique em &quot;Compactar extensão&quot;

O Chrome criará dois arquivos, um .crx e um .pem, que contém a chave privada da extensão.

Arquivos de extensão empacotados

Não perca a chave privada. Mantenha o arquivo .pem em um local secreto e seguro. Ele será necessário para atualizar a extensão.

Instale o arquivo .crx soltando-o na página "Gerenciamento" da extensão do Chrome.

Solte o arquivo para instalar

Depois de descartar o arquivo .crx, o navegador vai perguntar se a extensão pode ser adicionada e exibir avisos.

Aviso sobre a extensão &quot;Nova guia&quot;

Permissões com avisos

Observação:as tabelas de permissões são atualizadas com base no melhor esforço e podem conter pequenas discrepâncias em relação aos avisos atuais. Além disso, algumas permissões podem não mostrar avisos quando pareadas com outras permissões. Por exemplo, o aviso "tabs" não será exibido se a extensão também solicitar "<all_urls>". Para verificar os avisos mais recentes mostrados para as permissões de extensão, siga as etapas em Como visualizar avisos.

Permissão Descrição Alerta
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
Concede à extensão acesso a todos os hosts. É possível evitar a declaração de qualquer permissão de host usando a permissão activeTab. Ler e mudar todos os seus dados nos sites que você visitar
"https://HostName.com/" Concede à extensão acesso a "https://HostName.com/". É possível evitar a declaração de qualquer permissão de host usando a permissão activeTab. Ler e alterar seus dados em HostName.com
"bookmarks" Concede à extensão acesso à API chrome.bookmarks. Ler e mudar os favoritos
"clipboardRead" Obrigatório se a extensão usar document.execCommand('paste'). Ler os dados que você copia e cola
"clipboardWrite" Indica que a extensão usa document.execCommand('copy') ou document.execCommand('cut'). Modificar os dados que você copia e cola
"contentSettings" Concede à extensão acesso à API chrome.contentSettings. Mudar as configurações que controlam o acesso dos sites a recursos como cookies, JavaScript, plug-ins, geolocalização, microfone, câmera etc.
"debugger" Concede à extensão acesso à API chrome.debugger.
  • Acessar o back-end do depurador de página
  • Ler e mudar todos os seus dados nos sites que você visitar
"declarativeNetRequest" Concede à extensão acesso à API chrome.declarativeNetRequest. Bloquear conteúdo da página
"desktopCapture" Concede à extensão acesso à API chrome.desktopCapture. Capturar conteúdo da tela
"downloads" Concede à extensão acesso à API chrome.downloads. Gerenciar seus downloads
"geolocation" Permite que a extensão use a API Geolocation em HTML5 sem solicitar permissão ao usuário. Detectar sua localização física
"history" Concede à extensão acesso à API chrome.history. Ler e mudar seu histórico de navegação
"management" Concede à extensão acesso à API chrome.management. Gerenciar apps, extensões e temas
"nativeMessaging" Concede à extensão acesso à API de mensagens nativas. Comunicar-se com aplicativos nativos colaborativos
"notifications" Concede à extensão acesso à API chrome.notifications. Exibir notificações
"pageCapture" Concede à extensão acesso à API chrome.pageCapture. Ler e mudar todos os seus dados nos sites que você visitar
"privacy" Concede à extensão acesso à API chrome.privacy. Mudar as configurações relacionadas à privacidade
"proxy" Concede à extensão acesso à API chrome.proxy. Ler e mudar todos os seus dados nos sites que você visitar
"system.storage" Concede à extensão acesso à API chrome.system.storage. Identificar e ejetar dispositivos de armazenamento
"tabCapture" Concede às extensões acesso à API chrome.tabCapture. Ler e mudar todos os seus dados nos sites que você visitar
"tabs" Concede à extensão acesso a campos privilegiados dos objetos Tab usados por várias APIs, incluindo chrome.tabs e chrome.windows. Em muitas circunstâncias, a extensão não precisará declarar a permissão "tabs" para usar essas APIs. Ler seu histórico de navegação
"topSites" Concede à extensão acesso à API chrome.topSites. Ler uma lista dos sites mais visitados
"ttsEngine" Concede à extensão acesso à API chrome.ttsEngine. Ler todo o texto falado usando voz sintetizada
"webNavigation" Concede à extensão acesso à API chrome.webNavigation. Ler seu histórico de navegação

Atualizar permissões

Atualizar uma extensão com permissões adicionais pode desativá-la temporariamente. O usuário terá que reativá-la depois de concordar com novos avisos.

Se o usuário atualizar manualmente uma extensão que agora inclui a permissão tabs, ele receberá um aviso na página de gerenciamento.

Permissão para adicionar guias

Se a extensão for atualizada automaticamente, ela será desativada até que o usuário concorde com as novas permissões.

A extensão foi desativada

Concordar com as permissões

Isso pode ser evitado tornando o novo recurso opcional e adicionando novas atualizações de permissão ao optional_permissions no manifesto.