Защитите конфиденциальность пользователей

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

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

Уменьшите необходимые разрешения

API-интерфейсы, к которым может получить доступ расширение, указаны в поле permissions манифеста . Чем больше разрешений предоставлено, тем больше возможностей у злоумышленника для перехвата информации. В списке должны быть указаны только те API, от которых зависит расширение, и следует рассмотреть менее инвазивные варианты. Чем меньше разрешений запрашивает расширение, тем меньше предупреждений о разрешениях будет показано пользователю. Пользователи с большей вероятностью установят расширение с ограниченным количеством предупреждений.

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

активная вкладка

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

{
  "name": "Very Secure Extension",
  "version": "1.0",
  "description": "Example of a Secure Extension",
  "permissions": ["activeTab"],
  "manifest_version": 3
}

Разрешение activeTab не отображает предупреждающие сообщения во время установки.

Выберите дополнительные разрешения

Предоставьте пользователям возможность выбирать, какие функции и разрешения расширения им нужны, включив дополнительные разрешения . Если функция не важна для основных функций расширения, сделайте ее необязательной и переместите API или домен в поле optional_permissions .

{
  "name": "Very Secure Extension",
  ...
  "optional_permissions": [ "tabs", ],
  "optional_host_permissions": ["https://www.google.com/" ],
  ...
}

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

Скриншот всплывающего окна с просьбой включить разрешения.

Нажимаем «ОК!». вызовет следующее событие в сервисном работнике.

chrome.action.onClicked.addListener((event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request(
    {
      permissions: ["tabs", "scripting"],
      origins: ['https://www.google.com/']
    },
    function (granted) {
      // The callback argument will be true if the user granted the permissions.
      if (granted) {
        // doSomething();
      } else {
        // doSomethingElse();
      }
    }
  );
});

Затем пользователю будет предложен следующий запрос.

Скриншот запроса дополнительных разрешений.

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

Ограничьте и защитите информацию пользователя

Запрашивайте только минимальный объем данных, необходимый расширению. Чем меньше информации расширение запрашивает у пользователя, тем меньше риска будет раскрыто, если расширение будет скомпрометировано.

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

Сохранение данных и режим инкогнито

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

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

Чтобы определить, находится ли окно в режиме инкогнито, проверьте свойство incognito соответствующего объекта tabs.Tab или windows.Window .

function saveTabData(tab) {
  if (tab.incognito) {
    return;
  } else {
    chrome.storage.local.set({data: tab.url});
  }
}