A capacidade de uma extensão de acessar sites e a maioria das APIs do Chrome é determinada pelas permissões. As permissões precisam ser restritas apenas ao que é necessário para a funcionalidade. A limitação de permissões estabelece os recursos de uma extensão e reduz a possível invasão aos dados se a extensão for comprometida por um atacante. Implemente para proteger as extensões e os usuários 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 padrões de correspondência que concedem acesso a um ou mais hosts. 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. Um não pode solicitar mais permissões do que o necessário. não se prepare para o futuro solicitando permissões que podem 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 estão dispostos a fornecer uma extensão e quais recursos de acordo com a necessidade.
Identificar as permissões necessárias
Uma extensão simples pode precisar solicitar várias permissões, e muitas permissões serão exibidas warnings na instalação. É mais provável que os usuários confiem 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 tornando os recursos opcionais se exigirem permissões com avisos.
Acionar permissões opcionais com eventos
A funcionalidade principal da extensão de exemplo de permissões opcionais é modificar a página "Nova guia". Um deles é exibir o objetivo do dia do usuário. Este recurso exige apenas as permissões storage o que não inclui um aviso.
A extensão tem um recurso adicional: mostrando os principais sites do usuário. Esse recurso exige a topSites, que tem um aviso.
Desenvolver recursos que dependem de permissões com avisos como opcionais e apresentar esses oferece aos usuários uma introdução à extensão de forma orgânica e sem riscos. Além disso, esta permite que os usuários personalizem ainda mais sua experiência com uma extensão e cria 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 autoriza o
para usar a permissão "tabs"
na guia atual. Ela substitui a necessidade
"<all_urls>"
em muitos casos e não exibe nenhum aviso na instalação.
Sem ActiveTab:
Com ActiveTab:
A permissão activeTab
concede a uma extensão acesso temporário à guia ativa no momento quando a
user invoca a extensão. Se a extensão for comprometida, o invasor terá que esperar
para que o usuário invoque a extensão antes de obter acesso, e esse acesso duraria apenas até
a guia é navegada ou fechada.
Enquanto a permissão activeTab
estiver ativada para uma guia, uma extensão poderá:
- Chame
tabs.executeScript
outabs.insertCSS
nessa guia. - Acesse o URL, o título e o favicon dessa guia usando uma API que retorna um objeto
tabs.Tab
. - Interceptar solicitações de rede na guia para a origem do frame principal usando o método webRequest API. A extensão recebe temporariamente permissões de host para a origem do frame principal da guia.
Os gestos do usuário abaixo ativam activeTab
:
- Executar uma ação do navegador
- Executar uma ação de página
- Executar um item do menu de contexto
- Executar um atalho de teclado usando a API Commands (em inglês)
- Aceitação de uma sugestão da API da omnibox
Permissão de acesso
Se uma extensão precisar acessar URLs do file://
ou operar no modo de navegação anônima, os usuários terão que
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 file://
URLs com
extension.isAllowedFileSchemeAccess()
Noções básicas sobre permissões
Há avisos de permissão para descrever os recursos concedidos por uma API aos usuários da extensão, mas
alguns desses avisos podem não ser óbvios a princípio. Por exemplo, adicionar o "tabs"
resulta em um aviso aparentemente não relacionado: a extensão pode Ler o conteúdo da sua navegação
atividade. Embora a API chrome.tabs
possa ser usada apenas para abrir novas guias, ela também pode ser usada
para ver o URL que está associado a cada guia recém-aberta usando seus objetos tabs.Tab.
Quando possível, implemente permissões opcionais ou uma API menos eficiente para evitar alarmes de alertas.
Como visualizar avisos
Nenhum aviso de permissão será exibido se uma extensão for carregada como um arquivo descompactado. Para ver um
avisos de permissão da extensão, acesse chrome://extensions
e verifique se o modo de desenvolvedor está ativado
e clique em EMpacotar EXTENSÃO.
Especifique o caminho para a pasta da extensão no campo Diretório raiz da extensão e clique no Botão Compactar extensão. Ignore o campo Private key para um pacote inicial.
O Chrome criará dois arquivos, um .crx
e um .pem
, que contêm o nome da extensão
chave privada.
Não perca a chave privada. Mantenha o arquivo .pem
em um local secreto e seguro. será
necessário para atualizar a extensão.
Para instalar o arquivo .crx
, solte-o na página "Gerenciamento" da extensão do Chrome.
Depois de soltar o arquivo .crx
, o navegador perguntará se a extensão pode ser adicionada e exibida.
de alertas.
Permissões com avisos
Observação: as tabelas de permissões são atualizadas na medida do possível e podem conter pequenas discrepâncias
com os avisos atuais. Além disso, algumas permissões podem não exibir avisos quando pareadas com o
outras permissões. Por exemplo, o aviso "tabs"
não será exibido se a extensão também
solicita "<all_urls>"
. Para verificar os avisos mais recentes mostrados para permissões de extensões, siga
siga as etapas em Como visualizar avisos.
Permissão | Descrição | Aviso |
---|---|---|
|
Concede à extensão acesso a todos os hosts. É possível evitar a declaração de permissões de host usando a permissão activeTab. | Ler e mudar todos os seus dados nos sites que você visitar |
"https://HostName.com/" |
Concede acesso à extensão para "https://HostName.com/" . É possível evitar declarar
permissões 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 favoritos |
"clipboardRead" |
Obrigatório se a extensão usar document.execCommand('paste') . |
Ler dados copiados e colados |
"clipboardWrite" |
Indica que a extensão usa document.execCommand('copy') ou
document.execCommand('cut') . |
Modificar dados copiados e colados |
"contentSettings" |
Concede à extensão acesso à API chrome.contentSettings. | Mude as configurações que controlam o site o acesso 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 do HTML5 sem solicitar permissão do usuário. | Detectar sua localização física |
"history" |
Concede à extensão acesso à API chrome.history. | Ler e alterar 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 de colaboração |
"notifications" |
Concede à extensão acesso à API chrome.notifications. | Mostrar 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
Em muitas circunstâncias, a extensão não precisará declarar a permissão "tabs" para fazer uso
essas APIs. |
Ler seu histórico de navegação |
"topSites" |
Concede à extensão acesso à API chrome.topSites. | Ler uma lista dos sites visitados com mais frequência |
"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 após concordar com os novos avisos.
Se o usuário atualizar manualmente uma extensão que agora inclui a permissão guias, ele vai receber um aviso na página de gerenciamento.
Se a extensão for atualizada automaticamente, será desativada até que o usuário concorde com a nova permissões.
Para evitar isso, torne o novo recurso opcional e adicione novas atualizações de permissão ao
optional_permissions
no manifesto.