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

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

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

Уменьшите количество необходимых разрешений.

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});
  }
}