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

~/blog / Безпека / remote-code-rules-in-manifest-v3.md

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

Правила використання віддаленого коду в Manifest V3

Знайдіть віддалений виконуваний код Manifest V3 у пакеті й залежностях, розділіть дані та логіку й усуньте CDN-імпорт чи завантажений код до подання.

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

Для звичайних функцій Manifest V3 пакуйте JavaScript і WebAssembly з розширенням. Не завантажуйте CDN-скрипт, віддалений runtime-модуль чи текст для виконання. JSON та дані — інша категорія, але назва «конфігурація» не робить інструкції дозволеними. Перевірте точний пакет і залежності.

Стаття про перевірювану магазином виконувану поведінку. CSP описує runtime-обмеження, але локальне проходження не доводить відповідність магазину. Спеціальні API й ізольовані контексти мають власні правила, не універсальний обхід випуску для оновлення логіки.

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

Шукайте в самому білді

Перевірте JS, HTML, worker-імпорти, WASM-loaders і chunks. Шукайте URL, importScripts, import, script elements, eval і Function. Збіг URL — підказка, не доказ: це може бути документація чи дані. Простежте використання та визначте виконання отриманого.

Перевірте транзитивні залежності

SDK може завантажувати код навіть при одному імпорті. Приберіть зайві входи, оберіть сумісний build чи заміну. Tree shaking допомагає, коли небезпечного шляху справді немає в пакеті. Зберігайте відтворювану конфігурацію; ручна зміна minified зникне при новій збірці.

Обмежте віддалені дані схемою

Сервіс може повертати вміст чи значення для вже пакетної логіки. Визначте ключі, типи, межі й версії. Не приймайте код, URL модулів або інструкції нової логіки. Валідація також запобігає вимкненню перевірок чи розширенню збирання даних конфігурацією.

Усуньте причину до повторного подання

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

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

Валідатор приймає невелику конфігурацію без коду. Він відхиляє невідому версію й значення поза межами. Це не дозвіл на віддалені дані за політикою приватності; перевірте її окремо.

type DisplayConfig = { version: 1; compact: boolean; maxItems: number };
function parseDisplayConfig(value: unknown): DisplayConfig {
  if (!value || typeof value !== "object") throw new Error("Invalid config");
  const x = value as Record<string, unknown>;
  const allowed = new Set(["version", "compact", "maxItems"]);
  if (Object.keys(x).some(key => !allowed.has(key))) throw new Error("Unknown key");
  if (x.version !== 1 || typeof x.compact !== "boolean" ||
      typeof x.maxItems !== "number" || !Number.isInteger(x.maxItems) ||
      x.maxItems < 1 || x.maxItems > 50) throw new Error("Invalid config");
  return { version: 1, compact: x.compact, maxItems: x.maxItems };
}

За відмови fetch чи parse використайте безпечний default, не виконуйте відповідь. Не змішуйте конфігурацію з дозволами чи авторизацією без спеціального дизайну. JSON-parser сам не визначає, чи інтерпретатор порушує модель коду.

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

Пакування збільшує ZIP і прив’язує код до випуску, але робить його перевірюваним. Сервіс може працювати на сервері й повертати обмежені результати, додаючи доступність і приватність. Обирайте меншу сумісну залежність замість зайвих loaders. Малий ZIP не виправдовує обхід перевірки.

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

  • Перевірка source замість поданого build.
  • Виняток для відомого SDK.
  • Remote loader у невикористаному коді пакета.
  • Називання коду JSON-налаштуванням.
  • Sandbox чи debugger як універсальний обхід.

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

  • Виконувані ресурси враховано.
  • URL простежено до використання.
  • Loaders і входи залежностей перевірено.
  • Конфігурація має обмежену схему.
  • ZIP відтворюється з перевірених входів.
  • Спеціальні API звірено з політикою.

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

Чи віддалений JSON завжди дозволений?

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

Чи tree shaking усуне порушення?

Може, коли прибирає код із пакета. Перевірте артефакт, не покладайтеся на налаштування чи припущення недосяжності.

Висновок

Перевірте отриманий користувачами код і замініть віддалене виконання пакетною логікою чи обмеженим результатом сервісу. Пов’яжіть докази з артефактом, щоб оновлення залежності не повернуло loader непомітно.

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

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

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

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

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

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