как использовать CSP с pdf.js ? У меня проблема с worker

#javascript #pdf #content-security-policy #pdf.js

#javascript #PDF #content-security-policy #pdf.js

Вопрос:

Приложение MVC c #. Я использую CSP с этим форматом:

 <meta http-equiv="Content-Security-Policy" content="
    default-src 'self';
    script-src 'self' https://mozilla.github.io/pdf.js/build/pdf.js https://mozilla.github.io/pdf.js/build/pdf.worker.js;
    style-src  'self' https://meyerweb.com/eric/tools/css/reset/reset.css;
    object-src 'self';
    base-uri 'self';
    connect-src 'self';
    font-src 'self';
    frame-src 'self';
    img-src 'self';
    manifest-src 'self';
    media-src 'self';
    worker-src blob:;"/>
  

В проекте я использую pdf.js для PDF-файлов base64. Я вижу свои документы, но я не вижу панель кнопок из pdf.js .
Моя консоль браузера показывает:
введите описание изображения здесь

и моя функция javascript использует:

 var DivContenedorPDF = document.createElement("div");
DivContenedorPDF.id = "pdf-viewer";
var pdfData = atob(b64);
var pdfjsLib = window['pdfjs-dist/build/pdf'];
pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';....
  

Я попытался добавить blob: в default-src, используя local pdf.js (это не имеет ошибок, но не работает)…

дополнительная информация:

  • api.js является частью pdf.js webpack.
  • Мой тест находится в стадии подготовки (в localhost консоль выдает 0 ошибок).
  • У меня нет CSS для pdf.js панель кнопок.

заранее спасибо!

Ответ №1:

Попробуйте добавить blob: в script-src.

Комментарии:

1. все еще не работает с тем же сообщением об ошибке в консоли.

Ответ №2:

В консоли вашего браузера отображается CSP:

 default-src https: data: 'unsafe-inline' *.google.com
  

это отличается от того, что вы показали в мета-теге:

 default-src 'self'; ...
  

Похоже, на самом деле вы выпускаете политику безопасности контента в другом месте, чем вы думаете (и редактируете).

большой двоичный объект worker-src: в мета-теге вполне достаточно, чтобы разрешить создание worker из blob-URL.

Комментарии:

1. привет, @granty. Консоль использует общее сообщение об ошибке. Я объявляю один раз во всем своем коде.

2. Предупреждения консоли всегда основаны на реальном CSP. Блокировка политики, указанная в предупреждении консоли, каким-то образом попадает в браузер. Пожалуйста, проверьте наличие дубликатов <meta csp> в HTML-коде и проверьте в инструментах разработчика браузера, что на странице нет HTTP-заголовка CSP

Ответ №3:

@granty дал мне ответ: сообщение в консоли не является общим. Я не знаю почему, но мой IIS использовал другую конфигурацию CSP. Мой код работает, удаляя конфигурацию в разделе заголовка ответа IIS.