Коротка відповідь
Сторінки й 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 і правила магазину разом: виконання одного не доводить іншого.
Первинні джерела
Пов’язані посібники та приклади
Потрібно реалізувати це у вашому продукті?
Перегляньте відповідні приклади продуктів або поділіться контекстом розробки вебзастосунку, розширення Chrome, API чи SaaS.