Возможность расширения получать доступ к веб-сайтам и большинству API-интерфейсов Chrome определяется его заявленными разрешениями . Разрешения должны быть ограничены только тем, что необходимо для его функциональности. Ограничение разрешений устанавливает возможности расширения и снижает возможное вторжение в данные, если расширение будет скомпрометировано злоумышленником. Защитите расширения и их пользователей, реализовав явные, минимальные и необязательные разрешения.
Организуйте разрешения
Разрешения — это известные строки, которые ссылаются на API Chrome или соответствуют шаблонам , предоставляющим доступ к одному или нескольким хостам. Они перечислены в манифесте и указаны как обязательные разрешения или дополнительные разрешения .
{
"name": "Permissions Extension",
...
// required permissions
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
// optional permissions
"optional_permissions": [
"topSites",
"http://www.developer.chrome.com/*"
],
...
"manifest_version": 2
}
Ограничьте необходимые разрешения только тем, что необходимо для основных функций расширения. Расширение не должно запрашивать больше разрешений, чем ему необходимо в данный момент; не рассчитывайте на будущее, запрашивая разрешения, которые могут потребоваться при обновлениях.
Разрешения, необходимые для дополнительных функций, должны быть зарегистрированы как дополнительные разрешения . Это позволяет пользователям решать, какой объем доступа они готовы предоставить расширению и какие функции им желательны.
Определите необходимые разрешения
Простому расширению может потребоваться запросить несколько разрешений, и при установке многих разрешений отображаются предупреждения . Пользователи с большей вероятностью будут доверять расширению с ограниченным количеством предупреждений или разъяснением разрешений.
Определите основные функции расширения и какие разрешения для него необходимы. Рассмотрите возможность сделать функции необязательными, если они требуют разрешений с предупреждениями.
Запуск дополнительных разрешений с помощью событий
Основная функциональность образца дополнительного расширения разрешений переопределяет страницу новой вкладки. Одна из функций — отображение цели пользователя на день. Для этой функции требуется только разрешение на хранение , которое не включает предупреждение.
Расширение имеет дополнительную функцию; отображение топ-сайтов пользователя. Для этой функции требуется разрешение topSites , о котором имеется предупреждение.
Разработка функций, которые полагаются на разрешения с предупреждениями как необязательные, и органическое внедрение этих функций дает пользователям возможность без риска познакомиться с расширением. Кроме того, это позволяет пользователям дополнительно настраивать работу с расширением и дает возможность объяснять предупреждения.
Замените разрешение activeTab
Разрешение activeTab
предоставляет временный доступ к сайту, на котором находится пользователь, и позволяет расширению использовать разрешение "tabs"
на текущей вкладке. Во многих случаях он заменяет необходимость в "<all_urls>"
и не отображает никаких предупреждений при установке.
Без ActiveTab:
С активным табом:
Разрешение activeTab
предоставляет расширению временный доступ к текущей активной вкладке, когда пользователь вызывает расширение. Если расширение скомпрометировано, злоумышленнику придется дождаться, пока пользователь вызовет расширение, прежде чем получить доступ, и этот доступ будет длиться только до тех пор, пока вкладка не будет перемещена или закрыта.
Хотя для вкладки включено разрешение activeTab
, расширение может:
- Вызовите
tabs.executeScript
илиtabs.insertCSS
на этой вкладке. - Получите URL-адрес, заголовок и значок этой вкладки через API, который возвращает объект
tabs.Tab
. - Перехватывайте сетевые запросы на вкладке к источнику основного кадра вкладки с помощью API webRequest . Расширение временно получает разрешения хоста для источника основного фрейма вкладки.
Следующие пользовательские жесты включают activeTab
:
- Выполнение действия браузера
- Выполнение действия на странице
- Выполнение пункта контекстного меню
- Выполнение сочетания клавиш из командного API
- Принятие предложения от API омнибокса
Разрешение доступа
Если расширению необходимо получить доступ к URL-адресам file://
или работать в режиме инкогнито, пользователям необходимо будет разрешить доступ к этим функциям на странице сведений о расширении по адресу chrome://extensions.
Расширение может определить, включено ли оно в режиме инкогнито, вызвав extension.isAllowedIncognitoAccess()
или способно запускаться по URL-адресам file://
с extension.isAllowedFileSchemeAccess()
.
Понимание разрешений
Предупреждения о разрешениях существуют для описания возможностей, предоставляемых API пользователям расширений, но некоторые из этих предупреждений поначалу могут быть неочевидны. Например, добавление разрешения "tabs"
приводит к появлению, казалось бы, несвязанного предупреждения: расширение может читать вашу активность в Интернете . Хотя API chrome.tabs
можно использовать только для открытия новых вкладок, его также можно использовать для просмотра URL-адреса, связанного с каждой вновь открытой вкладкой, с помощью их объектов tabs.Tab .
По возможности реализуйте дополнительные разрешения или менее мощный API, чтобы избежать тревожных предупреждений.
Просмотр предупреждений
Предупреждения о разрешениях не будут отображаться, если расширение загружается как распакованный файл. Чтобы просмотреть предупреждения о разрешениях расширения, перейдите по адресу chrome://extensions
, убедитесь, что режим разработчика включен, и нажмите PACK EXTENSION .
Укажите путь к папке расширения в поле «Корневой каталог расширения», затем нажмите кнопку «Упаковать расширение» . Игнорируйте поле «Частный ключ» для первого пакета.
Chrome создаст два файла: файл .crx
и файл .pem
, содержащий закрытый ключ расширения.
Не потеряйте приватный ключ! Храните файл .pem
в секретном и безопасном месте; это будет необходимо для обновления расширения.
Установите файл .crx
, перетащив его на страницу управления расширением Chrome.
После удаления файла .crx
браузер спросит, можно ли добавить расширение, и отобразит предупреждения.
Разрешения с предупреждениями
Примечание. Таблицы разрешений обновляются по мере возможности и могут содержать небольшие расхождения с текущими предупреждениями. Кроме того, некоторые разрешения могут не отображать предупреждения в сочетании с другими разрешениями. Например, предупреждение "tabs"
не будет отображаться, если расширение также запрашивает "<all_urls>"
. Чтобы проверить последние предупреждения, отображаемые для разрешений расширения, выполните действия, описанные в разделе «Просмотр предупреждений» .
Разрешение | Описание | Предупреждение |
---|---|---|
| Предоставляет расширению доступ ко всем хостам. Возможно, можно избежать объявления каких-либо разрешений хоста, используя разрешение activeTab . | Прочитайте и измените все свои данные на веб-сайтах, которые вы посещаете. |
"https://HostName.com/" | Предоставляет расширению доступ к "https://HostName.com/" . Возможно, можно избежать объявления каких-либо разрешений хоста, используя разрешение activeTab . | Прочитайте и измените свои данные на HostName.com |
"bookmarks" | Предоставляет вашему расширению доступ к API chrome.bookmarks . | Читайте и меняйте закладки |
"clipboardRead" | Требуется, если расширение использует document.execCommand('paste') . | Чтение данных, которые вы копируете и вставляете |
"clipboardWrite" | Указывает, что расширение использует document.execCommand('copy') или document.execCommand('cut') . | Измените данные, которые вы копируете и вставляете |
"contentSettings" | Предоставляет вашему расширению доступ к API chrome.contentSettings . | Измените настройки, которые контролируют доступ веб-сайтов к таким функциям, как файлы cookie, JavaScript, плагины, геолокация, микрофон, камера и т. д. |
"debugger" | Предоставляет вашему расширению доступ к API chrome.debugger . |
|
"declarativeNetRequest" | Предоставляет вашему расширению доступ к API chrome.declarativeNetRequest . | Заблокировать содержимое страницы |
"desktopCapture" | Предоставляет вашему расширению доступ к API chrome.desktopCapture . | Захват содержимого вашего экрана |
"downloads" | Предоставляет вашему расширению доступ к API chrome.downloads . | Управляйте своими загрузками |
"geolocation" | Позволяет расширению использовать API геолокации HTML5 без запроса разрешения у пользователя. | Определите свое физическое местоположение |
"history" | Предоставляет вашему расширению доступ к API chrome.history . | Чтение и изменение истории просмотров |
"management" | Предоставляет расширению доступ к API chrome.management . | Управляйте своими приложениями, расширениями и темами |
"nativeMessaging" | Предоставляет расширению доступ к собственному API обмена сообщениями . | Общайтесь с сотрудничающими собственными приложениями |
"notifications" | Предоставляет вашему расширению доступ к API chrome.notifications . | Отображать уведомления |
"pageCapture" | Предоставляет расширению доступ к API chrome.pageCapture . | Прочитайте и измените все свои данные на веб-сайтах, которые вы посещаете. |
"privacy" | Предоставляет расширению доступ к API chrome.privacy . | Измените настройки конфиденциальности |
"proxy" | Предоставляет расширению доступ к API chrome.proxy . | Прочитайте и измените все свои данные на веб-сайтах, которые вы посещаете. |
"system.storage" | Предоставляет расширению доступ к API chrome.system.storage . | Определить и извлечь устройства хранения данных |
"tabCapture" | Предоставляет расширениям доступ к API chrome.tabCapture . | Прочитайте и измените все свои данные на веб-сайтах, которые вы посещаете. |
"tabs" | Предоставляет расширению доступ к привилегированным полям объектов Tab , используемых несколькими API, включая chrome.tabs и chrome.windows . Во многих случаях расширению не нужно будет объявлять разрешение "tabs" для использования этих API. | Прочитайте историю посещений |
"topSites" | Предоставляет расширению доступ к API chrome.topSites . | Прочитайте список наиболее часто посещаемых вами веб-сайтов. |
"ttsEngine" | Предоставляет расширению доступ к API chrome.ttsEngine . | Прочитайте весь текст, произнесенный с использованием синтезированной речи. |
"webNavigation" | Предоставляет расширению доступ к API chrome.webNavigation . | Прочитайте историю посещений |
Обновить разрешения
Обновление расширения с дополнительными разрешениями может временно отключить его. Пользователю придется повторно включить его после согласия со всеми новыми предупреждениями.
Если пользователь вручную обновит расширение, которое теперь включает разрешение вкладок , он получит предупреждение на странице управления.
Если расширение обновляется автоматически, оно будет отключено до тех пор, пока пользователь не согласится с новыми разрешениями.
Этого можно избежать, сделав новую функцию необязательной и добавив новые обновления разрешений для optional_permissions
в манифесте .