Политика безопасности контента Jenkins

Я запутался в политике безопасности контента Jenkins.

Я знаю эти сайты:

У меня есть html-страница, отображаемая через плагин Jenkins Clover. Эта страница html использует встроенный стиль, например:

<div class='greenbar' style='width:58px'>

Элемент div визуализирует индикатор прогресса. Использование конфигурации Jenkins CSP по умолчанию приводит к следующему результату: Progressbar_FAIL

В результате я хочу выглядеть следующим образом: Progressbar_WORKS

Я попытался смягчить правила CSP, добавив различные комбинации параметров (script -src, style-src) с разными уровнями (self, unsafe-inline,..), но ничего не работает.

Итак, мои вопросы сейчас:

  • Где я должен указать конфигурацию CSP?
  • Можно ли использовать встроенные стили?
  • Где должны быть расположены стили? Мои таблицы css-styles расположены локально на сервере Jenkins.
  • Какой лучший способ получить встроенный стиль и правила CSP "удовлетворены".

Обновить

1. Попробуйте: -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self' в файле jenkins.xml. Затем возникает следующая ошибка:

Отказывается применять встроенный стиль, поскольку он нарушает следующие Директива политики безопасности содержимого: "default-src" self ". Либо ключевое слово" небезопасное-встроенное ", хеш (" sha256- ") или" nonce" ('nonce -...') требуется для включения встроенного исполнения. Отметим также, что 'style-src' явно не задан, поэтому 'default-src' используется как запасной вариант.

2. Попробуйте -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self' в файле jenkins.xml. Затем возникает следующая ошибка:

Отказывается применять встроенный стиль, поскольку он нарушает следующие Политика политики безопасности содержимого: "style-src" self ". Либо ключевое слово" небезопасное-встроенное", хэш ('sha256-'), или nonce ('nonce -...') требуется для включения встроенного выполнения

Я понимаю, что эта попытка не может решить мою проблему, потому что default-src включает style-src

3. Попробуйте -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'unsafe-inline' в файле jenkins.xml. Затем возникает следующая ошибка:

Отказано, чтобы загрузить таблицу стилей s://jenkins/andsomedir/stylesheet.css [его https://... не разрешено размещать более двух ссылок:(] потому что он нарушает следующую директиву политики безопасности контента: "style-src" небезопасно-встроенный ".

Ответ 1

Во время экспериментов я рекомендую использовать консоль Script для динамического изменения параметра CSP, как описано на странице Конфигурация политики безопасности контента. (Там еще одна заметка на странице вики Jenkins, которая указывает, что вам может потребоваться принудительно перезагрузить страницу, чтобы увидеть новые настройки.)

Чтобы использовать как встроенные стили, так и локальные таблицы стилей, вам нужно добавить как self, так и unsafe-inline:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; style-src 'self' 'unsafe-inline';")

В зависимости от того, как манипулирует панель прогресса, вам может потребоваться настроить "script -src" таким же образом.

Как только вы найдете настройку, которая работает, вы можете настроить запуск Jenkins Script, чтобы добавить определение параметра CSP.

Ответ 2

Просто для того, чтобы четко указать, что это свойство CSP постоянно находится на Jenkins.

Если вы используете Jenkins на Ubuntu:

  • $ vim /etc/default/jenkins
  • Найдите строку с JAVA_ARGS и добавьте политику CSP следующим образом: JAVA_ARGS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

Если вы используете Jenkins на CentOS:

  • $ vim /etc/sysconfig/jenkins
  • Найдите строку с JENKINS_JAVA_OPTIONS и добавьте политику CSP следующим образом: JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

Сохраните файл и перезапустите Jenkins. $ sudo service jenkins restart или в вашем браузере http://localhost:8080/safeRestart

Ответ 3

Пытаясь поделиться своими процедурами, я всегда слежу за одним из них. Однако вам нужно обратить внимание на ваши ограничения безопасности, поскольку применение этих исправлений будет потенциально небезопасным.

  • Временное исправление:

Перейдите к консоли Jenkins и примените следующие команды в зависимости от релаксации политик CSP, которые вы хотите.

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline';")

Этот обходной путь предназначен для временных тестов или среды разработки.

Если вы хотите изменить его навсегда, добавьте это в команду java при запуске приложения:

-Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline';"

Наконец, я настоятельно рекомендую вам прочитать следующие статьи:

Официальная документация Дженкинса https://wiki.jenkins.io/display/JENKINS/Configuring+Content+Security+Policy

Временные решения для правил reset CSP временно или постоянно: https://www.cyotek.com/blog/adjusting-the-jenkins-content-security-policy

Ответ 4

Чтобы добавить еще к ответу @Kirill...

Если jenkins развернут в контейнере tomcat, установите значение среды CATALINA_OPTS в setenv.sh file (присутствует в ${CATALINA_BASE}/bin Folder), как указано ниже: -

export CATALINA_OPTS="-Xmx2048m -Xms2048m -XX:MaxNewSize=768m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${CATALINA_BASE}/logs/java.hprof -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC -Dcom.sun.management.jmxremote -Dhudson.model.DirectoryBrowserSupport.CSP=\"\" 

или

export CATALINA_OPTS="-Xmx2048m -Xms2048m -XX:MaxNewSize=768m -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/software/jenkins/tomcat_jenkins/logs/java.hprof -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC -Dcom.sun.management.jmxremote -Dhudson.model.DirectoryBrowserSupport.CSP=\"sandbox allow-scripts; default-src 'self'; script-src *; 'unsafe-eval'; img-src *; style-src *; 'unsafe-inline'; font-src *;\

После изменения вышеуказанного файла перезапустите tomcat. Это работало как прелесть для меня. Надеюсь, это поможет:)

Примечание. - CSP применим только для плагинов, таких как HTML-издатель, плагин maven. Он не работал для html файла электронной почты.

Ответ 5

У меня тоже была похожая проблема. Приведенное ниже решение работает для меня.

java -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts allow-popups allow-popups-to-escape-sandbox; style-src 'unsafe-inline' *;" -Dsvnkit.http.sslProtocols=TLSv1 -jar C:/server/Jenkins.war --httpPort=8280

Ответ 6

Ниже свойства помогли мне. Следующие свойства разрешают все внешние серверы.

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline';")