IHOR.DEVБАЗА_ЗНАНЬ
МЕНЮ

~/blog / Безпека / content-security-policy-for-chrome-extensions.md

// посібник · 3 хв читання

Політика безпеки контенту для розширень Chrome

Налаштуйте CSP Manifest V3, розрізняйте типовий і мінімально дозволений рівні, пакуйте локальні скрипти та діагностуйте блокування коду й мережі.

Коротка відповідь

Сторінки й workers Manifest V3 працюють під CSP розширення. Типовий script-src дозволяє пакетні скрипти self, блокує inline JavaScript і виконання рядків та не вмикає WebAssembly. Мінімально дозволений рівень може містити wasm-unsafe-eval для пакетного WASM, але не unsafe-eval чи довільні віддалені host скриптів. Розрізняйте типовий і мінімальний рівні.

CSP — одна межа, не повна перевірка безпеки. Він може блокувати inline handler, але небезпечний HTML все ще змінює UI чи перехоплює ввід дозволеними діями. Відображайте недовірений текст як текст, перевіряйте повідомлення й залежності пакета. Правила віддаленого коду також діють незалежно від проходження CSP.

Практичні кроки реалізації

Визначте заблокований контекст

Прочитайте ресурс, директиву й поверхню помилки. Popup, вкладка розширення, worker, isolated script і main-world мають різні контексти політик. Виправляйте потрібну поверхню, не розширюйте маніфест навмання. Відкрийте відповідну консоль та відтворіть збій пакета.

Перенесіть код у файли пакета

Замініть inline-атрибути слухачами локальних JavaScript-файлів. Використовуйте production-бандл без eval-інструментів розробки. Якщо SDK завантажує CDN-скрипт під час роботи, запакуйте сумісну реалізацію чи замініть залежність. Не вимикайте захист заради dev-режиму стартера.

Окремо обмежте мережу

Host permissions і connect-src відповідають різним питанням. Власний connect-src чи default-src може блокувати дозволений host-запит. Обмежуючи з’єднання, перелічіть реальні origin сервісів і перевірте недоступність. Список ґрунтується на трафіку; endpoint даних не повинен стати джерелом коду.

Явно перевірте sandbox

Sandbox-сторінки мають окрему політику й не мають прямого доступу до API розширення. Вони можуть ізолювати обґрунтоване виконання, але додають повідомлення й правила магазину. Sandbox не дозволяє завантаження довільної логіки до привілейованого розширення. Перевіряйте входи й виходи; за можливості обирайте залежність під звичайний CSP.

Приклад реалізації

Політика зберігає локальні скрипти, вимикає plugin objects і обмежує з’єднання умовним API. Використовуйте за відповідних потреб. Вона не надає host-доступу й не додає WASM без функції.

{
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'none'; connect-src 'self' https://api.example.com;"
  },
  "host_permissions": ["https://api.example.com/*"]
}

Додайте фрагмент до валідного маніфесту Manifest V3. Перевірте очікуваний і сторонній запит із контексту розширення. Перегляньте локальні скрипти HTML та відсутність dev-бандлів. Це інструкції перевірки, не твердження про випробування політики у продукті.

Компроміси та альтернативи

Явний список з’єднань зменшує випадкові адреси, але потребує підтримки. Типова політика простіша, проте не описує мережеву межу продукту. WASM виправданий реальною функцією; завчасно додавати його allowance зайве. Запишіть причину кожної зміни.

Поширені помилки

  • Плутання типової та мінімальної політик.
  • Додавання unsafe-eval для dev-бандла.
  • Очікування переваги host-дозволу над connect-src.
  • Сприйняття CSP як очищення HTML.
  • Обхід перевірки коду через sandbox.

Контрольний список перед випуском

  • Помилки пов’язані з контекстом і директивою.
  • Скрипти пакетні, без dev-eval.
  • Мережеві дозволи й CSP узгоджені.
  • Відображення та повідомлення мають валідацію.
  • Sandbox-входи й виходи обмежені.
  • ZIP і код залежностей перевірено.

Поширені запитання

Чи можна дозволити довірений CDN?

Не як довільне джерело скриптів звичайних сторінок Manifest V3. Пакуйте залежність і перевіряйте результат. Знайомий провайдер не скасовує модель.

Чи CSP усуває весь XSS?

Ні. Безпечне відображення й валідація лишаються основними межами. CSP обмежує виконання й ресурси, але не доводить довіру до HTML чи повідомлень.

Висновок

Діагностуйте операцію до зміни політики. Обирайте пакетний код під типові обмеження, додавайте лише потрібні ресурси. Перевіряйте CSP і правила магазину разом: виконання одного не доводить іншого.

Первинні джерела

Пов’язані посібники та приклади

Ігор Харчишин

Незалежний full-stack інженер продуктів, який пише посібники з реалізації розширень браузера та сучасних вебпродуктів на основі першоджерел.

Потрібно реалізувати це у вашому продукті?

Перегляньте відповідні приклади продуктів або поділіться контекстом розробки вебзастосунку, розширення Chrome, API чи SaaS.