Content Security Policy (CSP) — механизм веб-безопасности, позволяющий ограничивать источники загрузки скриптов, стилей, изображений и других ресурсов. CSP предотвращает выполнение нежелательного кода, что критично при работе с клиентскими библиотеками машинного обучения, такими как ONNX Runtime Web (ORT Web), поскольку модели могут загружаться динамически и выполняться в браузере.
CSP формируется с помощью HTTP-заголовка
Content-Security-Policy или мета-тега
<meta http-equiv="Content-Security-Policy" content="...">.
В заголовке указываются директивы, контролирующие источники
ресурсов:
script-src — определяет, откуда могут загружаться и
выполняться скрипты.style-src — ограничивает загрузку CSS.img-src — задает источники изображений.connect-src — определяет допустимые источники для XHR,
fetch и WebSocket.worker-src и child-src — контролируют
загрузку Web Worker, что важно для ORT Web при использовании
многопоточности.ONNX Runtime Web часто использует WebAssembly (WASM) и Web Workers для выполнения моделей. Это накладывает требования на CSP:
script-src: разрешение выполнения
inline-скриптов должно быть запрещено ('unsafe-inline' не
рекомендуется). Вместо этого все скрипты ORT Web подключаются через
внешние файлы.connect-src: загрузка ONNX-моделей
через fetch требует указания источника, откуда разрешено брать файлы
.onnx.worker-src: для Web Workers нужно
разрешить загрузку скриптов из доверенных источников.Пример директивы для безопасного запуска ORT Web:
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.jsdelivr.net;
connect-src 'self' https://models.example.com;
worker-src 'self' blob:;
В этом примере:
blob:, что
необходимо для динамического создания рабочих потоков из кода WASM.ORT Web использует WASM-модули, загружаемые через fetch.
Для корректной работы CSP должны быть учтены следующие моменты:
script-src не влияет на WASM напрямую,
но влияет на скрипты, создающие WebAssembly-инстансы.worker-src должен разрешать использование
blob:, так как ORT Web часто инстанцирует воркеры
динамически.connect-src должен включать URL
загрузки .wasm и .onnx файлов, иначе загрузка
модели заблокируется.Пример конфигурации для загрузки модели и WASM из CDN:
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.jsdelivr.net;
connect-src 'self' https://cdn.jsdelivr.net https://models.example.com;
worker-src 'self' blob:;
Строгие политики могут приводить к ошибкам при инициализации ORT Web:
Refused to load script — скрипты библиотеки
заблокированы.Refused to connect — модели или WASM-файлы не могут
быть загружены.Refused to create worker — Web Worker не создается
из-за ограничений worker-src.Для устранения этих ошибок важно:
blob: для Web Workers.'unsafe-inline', вместо этого подключать все
скрипты внешними файлами.При использовании ORT Web в React, Vue или Angular CSP имеет дополнительные нюансы:
nonce-или hash-подписи в CSP.worker-src blob:.Пример для React + ORT Web:
Content-Security-Policy:
default-src 'self';
script-src 'self' 'sha256-XYZ...';
connect-src 'self' https://models.example.com;
worker-src 'self' blob:;
Здесь 'sha256-XYZ...' — хэш скрипта, сгенерированный при
сборке, что обеспечивает безопасность без использования
'unsafe-inline'.
*.Правильная настройка CSP обеспечивает безопасную и корректную работу ONNX Runtime Web в браузере, предотвращает выполнение нежелательных скриптов и блокирует загрузку вредоносных ресурсов, сохраняя высокую производительность клиентского машинного обучения.