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.
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.
La extensión tiene una función adicional. mostrar los sitios principales del usuario. Esta función requiere la topSites, que tiene una advertencia.
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:
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 atabs.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
:
- Ejecutar una acción del navegador
- Ejecutar una acción de página
- Ejecutar un elemento de menú contextual
- Ejecutar una combinación de teclas desde la API de Commands
- Aceptar una sugerencia de la API del cuadro multifunción
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.
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.
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.
Chrome creará dos archivos, un archivo .crx
y un archivo .pem
, que contiene el archivo
privada.
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.
Después de soltar el archivo .crx
, el navegador preguntará si se puede agregar la extensión y mostrarla
advertencias existentes.
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 |
---|---|---|
|
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. |
|
"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.
Si la extensión se actualiza automáticamente, se inhabilitará hasta que el usuario acepte la nueva 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.