Объявляйте разрешения и предупреждайте пользователей

Возможность расширения получать доступ к веб-сайтам и большинству 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 , о котором имеется предупреждение.

Предупреждение о расширении для API topSites

Разработка функций, которые полагаются на разрешения с предупреждениями как необязательные, и органическое внедрение этих функций дает пользователям возможность без риска познакомиться с расширением. Кроме того, это позволяет пользователям дополнительно настраивать работу с расширением и дает возможность объяснять предупреждения.

Замените разрешение activeTab

Разрешение activeTab предоставляет временный доступ к сайту, на котором находится пользователь, и позволяет расширению использовать разрешение "tabs" на текущей вкладке. Во многих случаях он заменяет необходимость в "<all_urls>" и не отображает никаких предупреждений при установке.

Без ActiveTab:

Пользовательский интерфейс разрешений без activeTab

С активным табом:

Пользовательский интерфейс разрешений с ActiveTab

Разрешение activeTab предоставляет расширению временный доступ к текущей активной вкладке, когда пользователь вызывает расширение. Если расширение скомпрометировано, злоумышленнику придется дождаться, пока пользователь вызовет расширение, прежде чем получить доступ, и этот доступ будет длиться только до тех пор, пока вкладка не будет перемещена или закрыта.

Хотя для вкладки включено разрешение activeTab , расширение может:

  • Вызовите tabs.executeScript или tabs.insertCSS на этой вкладке.
  • Получите URL-адрес, заголовок и значок этой вкладки через API, который возвращает объект