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.
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.
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.
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:
Com a 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
outabs.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
:
- Executando uma ação do navegador
- Executar uma ação de página
- Executar um item de menu de contexto
- executar um atalho de teclado da API de comandos.
- Aceitando uma sugestão da API omnibox
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.
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.
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.
O Chrome criará dois arquivos, um .crx
e um .pem
, que contém a chave privada
da extensão.
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.
Depois de descartar o arquivo .crx
, o navegador vai perguntar se a extensão pode ser adicionada e exibir
avisos.
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 |
---|---|---|
|
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. |
|
"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.
Se a extensão for atualizada automaticamente, ela será desativada até que o usuário concorde com as novas permissões.
Isso pode ser evitado tornando o novo recurso opcional e adicionando novas atualizações de permissão ao
optional_permissions
no manifesto.