Как работать с CSP для динамически генерируемой страницы - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть расширение Chrome, которое начало испытывать проблемы из-за изменений CSP на целевой странице.

Расширение имеет контент-скрипт, который создает новое окно, используя window.open - назовем его окном отчета. Это окно содержит динамически генерируемый и загружаемый отчет. Активность пользователя на целевой странице генерирует содержимое в окне отчета - аналогично журналу активности, в котором заголовок отображается как anchor, а при нажатии anchor он переключает отображение сведений <section>, чтобы сделать их видимыми / невидимый, используя код, подобный приведенному ниже

<a href="javascript:toggleDisplay('detail-1')">Data #1</a>
<a href="javascript:toggleDisplay('detail-2')">Data #2</a>
<a href="javascript:toggleDisplay('detail-3')">Data #3</a>

Необходимые функции динамически добавляются в документ с использованием кода, аналогичного приведенному ниже

let script = document.createElement('script');
script.text = code.join('\n');
doc.head.appendChild(script);

В окне отчета имеется много таких записей, и они создаются не сразу, а в ответ на действия пользователя.

Это все работает отлично и денди. Но недавно веб-сайт ввел ограничения CSP для встроенного кода JavaScript.

Content-Security-Policy: script-src 'sha256-6gLjSWp3GRKZCUFvRalksdfkahsdfX5aGHtECD1wVRg=' 'unsafe-inline' ...

Из-за этого мои данные section не открываются, когда пользователь щелкает заголовок тега anchor и отображает на консоли ошибку ниже

Refused to run the JavaScript URL because it violates the following Content Security Policy directive...

Это то, что я хочу знать

  1. Можно ли ослабить или сбросить CSP во вновь созданном дочернем окне? Если да, то как? Я знаю, что метатеги не могут ослабить это, но только ограничивают его.
  2. Как мне выполнить эту новую директиву CSP, если отчет представляет собой динамически генерируемый DOM. Кроме того, мне нужно, чтобы этот отчет был загружаемым, в настоящее время я могу легко загрузить DOM документа в html, чтобы предоставить отчет. Похоже, мне, возможно, придется предоставить отчет MHT, если сценарии должны быть помещены в отдельный документ. Я даже не уверен, как предоставить скрипт в отдельном документе, учитывая, что это расширение chrome
...