Cómo declarar permisos y advertir a los usuarios

La capacidad de una extensión para acceder a sitios web y a la mayoría de las APIs de Chrome está determinada por su permisos. Los permisos deben restringirse a solo lo necesario para su funcionalidad. Limitar los permisos establece las capacidades de una extensión y reduce la posible incursión en los datos si la extensión es vulnerada por un atacante. Protege las extensiones y a sus usuarios implementando permisos explícitos, mínimos y opcionales.

Organizar permisos

Los permisos son cadenas conocidas que hacen referencia a una API de Chrome o patrones de coincidencia que otorgan acceso a de uno o más hosts. Se enumeran en el manifiesto y se especifican como permisos necesarios o permisos opcionales.

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

Limita los permisos necesarios a solo lo que sea necesario para la funcionalidad principal de la extensión. Los extensión no debe solicitar más permisos de los que necesita actualmente. no lo prepares para el futuro solicitando permisos que podrían ser necesarios con las actualizaciones.

Los permisos necesarios para las funciones opcionales deben registrarse como permisos opcionales. Esta les permite a los usuarios decidir la cantidad de acceso que están dispuestos a proporcionar a una extensión y qué funciones deseados.

Identifica los permisos necesarios

Es posible que una extensión simple deba solicitar varios permisos, y se mostrarán muchos de ellos warnings sobre la instalación. Es más probable que los usuarios confíen en una extensión con advertencias limitadas o cuando se les explican los permisos.

Advertencias sobre los permisos de extensiones durante la instalación

Identifica la funcionalidad principal de una extensión y los permisos que se requieren para ella. Reflexiona Hacer que las funciones sean opcionales si requieren permisos con advertencias

Activa permisos opcionales con eventos

La funcionalidad principal de la extensión de ejemplo de permisos opcionales anula la página Nueva pestaña. Una función muestra el objetivo del día del usuario. Esta función solo requiere el almacenamiento permiso, que no incluye una advertencia.

Botón de extensión que habilita funciones adicionales

La extensión tiene una función adicional. mostrar los sitios principales del usuario. Esta función requiere la topSites, que tiene una advertencia.

Advertencia de extensión para la API de topSites

Desarrollar funciones que se basen en permisos con advertencias como opcionales e introducir esos permisos de forma orgánica para los usuarios una introducción sin riesgos a la extensión. Además, este permite que los usuarios personalicen aún más su experiencia con una extensión y crea oportunidades para explicar las advertencias.

Sustituye el permiso activeTab

El permiso activeTab otorga acceso temporal al sitio en el que se encuentra el usuario y permite para usar el permiso "tabs" en la pestaña actual. Reemplaza la necesidad de "<all_urls>" en muchos casos y no muestra ninguna advertencia durante la instalación.

Sin activeTab:

IU de permisos sin activeTab

Con activeTab:

IU de permisos con activeTab

El permiso activeTab otorga a una extensión acceso temporal a la pestaña activa en ese momento cuando la el usuario invoca la extensión. Si la extensión está comprometida, el atacante tendría que esperar. para que el usuario invoque la extensión antes de obtener acceso, y ese acceso solo duraría hasta la pestaña se navega o se cierra.

Mientras el permiso activeTab está habilitado para una pestaña, una extensión puede hacer lo siguiente:

  • Llama a tabs.executeScript o a tabs.insertCSS en esa pestaña.
  • Obtén la URL, el título y el ícono de página de esa pestaña a través de una API que muestre un objeto tabs.Tab.
  • Intercepta las solicitudes de red en la pestaña al origen del marco principal de la pestaña con webRequest en la API de Cloud. La extensión obtiene de manera temporal los permisos del host para el origen del marco principal de la pestaña.

Los siguientes gestos del usuario habilitan activeTab:

Permitir el acceso

Si una extensión necesita acceder a las URLs de file://, o bien operar en modo Incógnito, los usuarios deberán hacer lo siguiente: habilitar el acceso para esas funciones en la página de detalles de la extensión en chrome://extensions.

Permitir las URLs de archivos y el modo Incógnito en la página de detalles de la extensión

Una extensión puede detectar si está habilitada en el modo Incógnito llamando extension.isAllowedIncognitoAccess() o puede ejecutarse en file:// URLs con extension.isAllowedFileSchemeAccess()

Información sobre los permisos

Las advertencias de permisos existen para describir las capacidades otorgadas por una API a los usuarios de extensiones, pero Es posible que algunas de estas advertencias no sean obvias al principio. Por ejemplo, si agregas "tabs" permiso genera una advertencia aparentemente no relacionada: la extensión puede Leer la información actividad. Si bien la API de chrome.tabs se puede usar solo para abrir pestañas nuevas, también se puede usar para ver la URL asociada con cada pestaña abierta recientemente usando sus objetos tabs.Tab.

Cuando sea posible, implementa permisos opcionales o una API menos potente para evitar alarmas. advertencias existentes.

Cómo ver las advertencias

No se mostrarán advertencias de permisos si se carga una extensión como un archivo desempaquetado. Para ver un advertencias de permisos de la extensión, navega a chrome://extensions, asegúrate de que el modo de desarrollador esté habilitado y haz clic en PAQUETAR EXTENSIÓN.

Se marcó el modo de desarrollador, por lo que se hace clic en Paquete de extensión.

Especifica la ruta de acceso a la carpeta de la extensión en el campo del directorio raíz de la extensión y, luego, haz clic en Botón Empaquetar extensión: Ignora el campo Clave privada para un paquete por primera vez.

Especifica la ruta de la extensión y, luego, haz clic en Empaquetar extensión.

Chrome creará dos archivos, un archivo .crx y un archivo .pem, que contiene el archivo privada.

Archivos de extensión empaquetados

No pierdas la clave privada. Mantén el archivo .pem en un lugar secreto y seguro. será necesario para actualizar la extensión.

Para instalar el archivo .crx, suéltalo en la página Administración de la extensión de Chrome.

Suelta el archivo para instalarlo

Después de soltar el archivo .crx, el navegador preguntará si se puede agregar la extensión y mostrarla advertencias existentes.

Advertencia para la extensión de nueva pestaña

Permisos con advertencias

Nota: Las tablas de permisos se actualizan según el criterio del mejor esfuerzo y pueden contener pequeñas discrepancias. con las advertencias actuales. Además, es posible que algunos permisos no muestren advertencias cuando se vinculan con otros permisos. Por ejemplo, la advertencia "tabs" no se mostrará si la extensión también solicita "<all_urls>". Para verificar las advertencias más recientes que se muestran sobre los permisos de las extensiones, sigue estos pasos: los pasos que se indican en Cómo ver las advertencias.

Permiso Descripción Advertencia
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
Otorga a la extensión acceso a todos los hosts. Puedes evitar declarar cualquier permiso de host usando el permiso activeTab. Leer y cambiar todos tus datos en los sitios web que visitas
"https://HostName.com/" Otorga a la extensión acceso a "https://HostName.com/". Puedes evitar declarar cualquier los permisos del host con el permiso activeTab. Leer y modificar tus datos en HostName.com
"bookmarks" Le otorga a tu extensión acceso a la API de chrome.bookmarks. Cómo leer y cambiar tus favoritos
"clipboardRead" Obligatorio si la extensión usa document.execCommand('paste'). Cómo leer los datos que copias y pegas
"clipboardWrite" Indica que la extensión usa document.execCommand('copy') o document.execCommand('cut') Cómo modificar los datos que copias y pegas
"contentSettings" Le otorga a tu extensión acceso a la API de chrome.contentSettings. Cambiar la configuración que controla el uso de los sitios web acceso a funciones como cookies, JavaScript, complementos ubicación geográfica, micrófono, cámara, etcétera.
"debugger" Otorga a tu extensión acceso a la API de chrome.debugger.
  • Cómo acceder al backend del depurador de páginas
  • Leer y cambiar todos tus datos en los sitios web que visitas
"declarativeNetRequest" Le otorga a tu extensión acceso a la API de chrome.declarativeNetRequest. Cómo bloquear el contenido de la página
"desktopCapture" Le otorga a tu extensión acceso a la API de chrome.desktopCapture. Cómo capturar contenido de la pantalla
"downloads" Le otorga a tu extensión acceso a la API de chrome.downloads. Administra tus descargas
"geolocation" Permite que la extensión use la API de ubicación geográfica de HTML5. sin solicitarle permiso al usuario. Cómo detectar tu ubicación física
"history" Le otorga a tu extensión acceso a la API de chrome.history. Cómo leer y cambiar el historial de navegación
"management" Le otorga a la extensión acceso a la API de chrome.management. Administra tus apps, extensiones y temas
"nativeMessaging" Otorga a la extensión acceso a la API de mensajería nativa. Cómo comunicarse con aplicaciones nativas cooperativas
"notifications" Le otorga a tu extensión acceso a la API de chrome.notifications. Visualización de notificaciones
"pageCapture" Le otorga a la extensión acceso a la API de chrome.pageCapture. Leer y cambiar todos tus datos en los sitios web que visitas
"privacy" Otorga a la extensión acceso a la API de chrome.privacy. Cómo cambiar la configuración relacionada con la privacidad
"proxy" Otorga a la extensión acceso a la API de chrome.proxy. Leer y cambiar todos tus datos en los sitios web que visitas
"system.storage" Le otorga a la extensión acceso a la API de chrome.system.storage. Identifica y expulsa los dispositivos de almacenamiento
"tabCapture" Otorga a las extensiones acceso a la API de chrome.tabCapture. Leer y cambiar todos tus datos en los sitios web que visitas
"tabs" Otorga a la extensión acceso a los campos privilegiados de los objetos Tab que usan varias APIs. incluidas chrome.tabs y chrome.windows. En En muchos casos, la extensión no necesitará declarar el permiso "tabs" para usar estas APIs. Cómo leer el historial de navegación
"topSites" Le otorga a la extensión acceso a la API de chrome.topSites. Cómo leer una lista de los sitios web que visitas con más frecuencia
"ttsEngine" Otorga a la extensión acceso a la API de chrome.ttsEngine. Cómo leer todo el texto que se lee con la función de voz sintetizada
"webNavigation" Le otorga a la extensión acceso a la API de chrome.webNavigation. Cómo leer el historial de navegación

Actualizar permisos

Es posible que se inhabilite temporalmente una extensión con permisos adicionales. El usuario deberá vuelve a habilitarla después de aceptar las advertencias nuevas.

Si el usuario actualiza manualmente una extensión que ahora incluye el permiso de pestañas, obtendrá una advertencia en la página de administración.

Permiso para agregar pestañas

Si la extensión se actualiza automáticamente, se inhabilitará hasta que el usuario acepte la nueva permisos.

Se inhabilitó la extensión

Aceptar los permisos

Esto se puede evitar haciendo que la nueva función sea opcional y agregando nuevas actualizaciones de permisos a optional_permissions en el manifiesto.