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 se determina mediante sus permisos declarados. Los permisos se deben restringir solo a lo que se necesita para su funcionalidad. Limitar los permisos establece las capacidades de una extensión y reduce la posible incursión en datos si un atacante la ve comprometida. Protege las extensiones y a sus usuarios mediante la implementación de 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 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
}

Limitar los permisos necesarios solo a los necesarios para la funcionalidad principal de la extensión Una extensión no debe solicitar más permisos de los que necesita actualmente. No hagas pruebas futuras mediante la solicitud de permisos que puedan ser necesarios con actualizaciones.

Los permisos necesarios para las funciones opcionales se deben registrar como permisos opcionales. Esto les permite a los usuarios decidir cuánto acceso están dispuestos a proporcionar una extensión y qué funciones desean.

Identifica los permisos necesarios

Es posible que una extensión simple deba solicitar varios permisos, y muchos permisos muestran advertencias durante la instalación. Es más probable que los usuarios confíen en una extensión con advertencias limitadas o cuando se les expliquen los permisos.

Advertencias de permisos de extensiones durante la instalación

Identifica la funcionalidad principal de una extensión y los permisos que se le requieren. Considera hacer que las funciones sean opcionales si requieren permisos con advertencias.

Activa permisos opcionales con eventos

La funcionalidad principal de la extensión de muestra 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 permiso de almacenamiento, que no incluye una advertencia.

Botón de la extensión que habilita funciones adicionales

La extensión cuenta con una función adicional que muestra los sitios principales del usuario. Esta función requiere el permiso topSites, que incluye una advertencia.

Advertencia de extensión para la API de topSites

Desarrollar funciones que dependen de permisos con advertencias como opcionales y, luego, incorporarlas de forma orgánica les brinda a los usuarios una introducción sin riesgo a la extensión. Además, esto permite que los usuarios personalicen aún más su experiencia con una extensión y crea la oportunidad de explicar advertencias.

Sustituye el permiso activeTab

El permiso activeTab otorga acceso temporal al sitio en el que se encuentra el usuario y permite que la extensión use el permiso "tabs" en la pestaña actual. Reemplaza la necesidad de usar "<all_urls>" en muchos casos y no muestra advertencias 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 actualmente activa cuando el usuario invoca la extensión. Si la extensión está comprometida, el atacante debería esperar a que el usuario la invoque para obtener acceso, y ese acceso solo durará hasta que se navegue por la pestaña o se cierre.

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

  • Llama a tabs.executeScript o 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 solicitudes de red en la pestaña al origen del marco principal de la pestaña mediante la API de webRequest. La extensión obtiene temporalmente permisos de host para el origen del marco principal de la pestaña.

Los siguientes gestos del usuario habilitan activeTab:

Permite el acceso

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

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

Para detectar si está habilitada en modo Incógnito, una extensión puede llamar a extension.isAllowedIncognitoAccess() o ejecutarse en URLs file:// con extension.isAllowedFileSchemeAccess() .

Información sobre los permisos

Las advertencias de permisos existen para describir las capacidades que otorga una API a los usuarios de extensiones, pero es posible que algunas de estas advertencias no sean evidentes al principio. Por ejemplo, agregar el permiso "tabs" genera una advertencia aparentemente no relacionada: la extensión puede Leer tu actividad de navegación. Aunque 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 recién abierta con sus objetos tabs.Tab.

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

Cómo ver las advertencias

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

Se marca el modo de desarrollador; luego, se hace clic en la extensión del paquete.

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 el botón Empaquetar la extensión. Ignora el campo Clave privada para los paquetes nuevos.

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

Chrome creará dos archivos: .crx y .pem, que contienen la clave privada de la extensión.

Archivos de extensiones empaquetados

No pierdas la clave privada. Mantén el archivo .pem en un lugar secreto y seguro, ya que 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 te preguntará si se puede agregar la extensión y mostrará advertencias.

Advertencia sobre la nueva extensión de 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 para los permisos de extensiones, sigue los pasos que se indican en Cómo ver advertencias.

Permisos Descripción Advertencia
  • "http://*/*"
  • "https://*/*"
  • "*://*/*"
  • "<all_urls>"
Otorga a la extensión acceso a todos los hosts. Para evitar la declaración de cualquier permiso de host, usa el permiso activeTab. Cómo leer y modificar todos tus datos en los sitios web que visitas
"https://HostName.com/" Otorga a la extensión acceso a "https://HostName.com/". Para evitar la declaración de cualquier permiso de host, es posible usar el permiso activeTab. Leer y modificar tus datos en HostName.com
"bookmarks" Otorga a tu extensión acceso a la API de chrome.bookmarks. Cómo leer y cambiar tus favoritos
"clipboardRead" Es 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" Otorga a tu extensión acceso a la API de chrome.contentSettings. Cambiar la configuración que controla el acceso de los sitios web a funciones como las cookies, JavaScript, los complementos, la ubicación geográfica, el micrófono, la cámara, etcétera
"debugger" Otorga a tu extensión acceso a la API de chrome.debugger.
  • Accede al backend del depurador de páginas
  • Cómo leer y modificar todos tus datos en los sitios web que visitas
"declarativeNetRequest" Otorga a tu extensión acceso a la API chrome.declarativeNetRequest. Bloquear contenido de la página
"desktopCapture" Otorga a tu extensión acceso a la API de chrome.desktopCapture. Cómo capturar el contenido de la pantalla
"downloads" Otorga a tu extensión acceso a la API de chrome.downloads. Cómo administrar las descargas
"geolocation" Permite que la extensión use la API de ubicación geográfica de HTML5 sin solicitarle permiso al usuario. Detectar tu ubicación física
"history" Otorga a tu extensión acceso a la API de chrome.history. Cómo leer y cambiar el historial de navegación
"management" 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. Comunicarse con aplicaciones nativas en cooperación
"notifications" Otorga a tu extensión acceso a la API de chrome.notifications. Visualización de notificaciones
"pageCapture" Otorga a la extensión acceso a la API de chrome.pageCapture. Cómo leer y modificar 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. Cómo leer y modificar todos tus datos en los sitios web que visitas
"system.storage" Otorga a la extensión acceso a la API de chrome.system.storage. Identifica y expulsa dispositivos de almacenamiento
"tabCapture" Otorga a las extensiones acceso a la API de chrome.tabCapture. Cómo leer y modificar todos tus datos en los sitios web que visitas
"tabs" Otorga a la extensión acceso a campos privilegiados de los objetos Tab utilizados por varias API, incluidas chrome.tabs y chrome.windows. En muchas circunstancias, la extensión no necesitará declarar el permiso "tabs" para usar estas APIs. Cómo leer el historial de navegación
"topSites" 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 habla con voz sintetizada
"webNavigation" Otorga a la extensión acceso a la API de chrome.webNavigation. Cómo leer el historial de navegación

Actualizar permisos

Si actualizas una extensión con permisos adicionales, es posible que se inhabilite temporalmente. El usuario deberá volver a habilitarla después de aceptar cualquier advertencia nueva.

Si el usuario actualiza de forma manual una extensión que ahora incluye el permiso pestañas, recibirá 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 los permisos nuevos.

Se inhabilitó la extensión

Aceptar los permisos

Para evitarlo, haz que la nueva función sea opcional y agrega nuevas actualizaciones de permisos a optional_permissions en el manifiesto.