Политика безопасности содержимого 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, ..), но ничего не работает.

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

  1. Где мне указать конфигурацию CSP?
  2. Можно ли использовать встроенные стили?
  3. Где должны быть расположены стили? Мои таблицы стилей css расположены локально на сервере Jenkins.
  4. Как лучше всего "удовлетворить" встроенный стиль и правила CSP?

Обновить

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

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

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

Отказался от применения встроенного стиля, поскольку он нарушает следующую директиву политики безопасности содержимого: "style-src 'self'". Для включения встроенного выполнения требуется ключевое слово 'unsafe-inline', хэш ('sha256-') или одноразовый номер ('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 'unsafe-inline' ".


person Thomas    schedule 03.06.2016    source источник
comment
Можно использовать встроенные стили или стили из файлов, расположенных на сервере Jenkins. Похоже, вы на правильном пути, но вы не опубликовали в точности то, что пробовали (вы использовали Script Console? Что вы набрали? Какие значения вы установили для параметра CSP ?), поэтому трудно указать, что происходит не так.   -  person Dave Bacher    schedule 03.06.2016
comment
Спасибо, что ответили. Обновил свой пост.   -  person Thomas    schedule 03.06.2016


Ответы (6)


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

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

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

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

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

person Dave Bacher    schedule 03.06.2016
comment
Если вы не знаете, как применить эти настройки на постоянной основе (поскольку изменения через консоль сценариев сбрасываются после перезагрузки Jenkins), вы можете добавить их в JAVA_ARGS в /etc/default/jenkins: JAVA_ARGS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; style-src 'self' 'unsafe-inline';\"" - person Manuel; 12.10.2016
comment
Мне пришлось очистить кеш браузера после изменения политики, которая должна быть отражена. - person Lars Bilke; 06.12.2016
comment
Другой способ применить это при запуске - использовать wiki.jenkins.io/display/ JENKINS / Пост-инициализация + скрипт. Создайте файл, например ~ jenkins / init.groovy.d / adjust-content-security-policy.groovy, с единственной строкой System.setProperty (...), и он будет выполнен после запуска Jenkins. - person hshib; 21.08.2018
comment
Удалив сам заголовок CSP, запустив команду ниже, System.setProperty (hudson.model.DirectoryBrowserSupport.CSP,) будет ли это работать? Я знаю, что это сделает Дженкинса нестабильным, но сейчас меня это не волнует. - person sjethvani; 22.08.2018
comment
Я считаю предложение @hshib наиболее элегантным и менее навязчивым. Работает как часы. В любом случае подход JAVA_ARGS у меня не сработал. - person YaP; 16.05.2019

Просто для ясности об установке этого свойства CSP на Jenkins на постоянной основе.

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

  1. $ vim /etc/default/jenkins
  2. Найдите строку с 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:

  1. $ vim /etc/sysconfig/jenkins
  2. Найдите строку с 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

person de.la.ru    schedule 06.04.2017
comment
Можете ли вы помочь мне установить его постоянно в windows. Я не уверен, какой файл мне выбрать - person NarendraR; 31.10.2018
comment
Расположение по умолчанию в Windows - C:\Program Files\Jenkins\jenkins.xml. Пожалуйста, проверьте. - person de.la.ru; 01.11.2018

Ниже свойства работали для меня. Следующие свойства разрешают использование всех внешних серверов.

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';")
person kolukuri    schedule 21.07.2019
comment
Это в значительной степени полностью отключает CSP, вы можете просто использовать: wiki.jenkins. io / display / JENKINS / - person user158037; 21.08.2019
comment
Остальные варианты у меня не сложились, вот этот. Но я бы не рекомендовал это делать, так как это открывает множество ворот. - person Rvy Pandey; 10.12.2019
comment
@ user158037, у меня как-то не получилось - person kolukuri; 22.07.2021

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

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

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=\"\" 

or

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 publisher, maven plugin. Это не сработало для HTML-файла электронной почты.

person Bhupender Kumawat    schedule 14.11.2017

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

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

Перейдите в консоль 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';"

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

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

Обходные пути для временного или постоянного сброса правил CSP: https://www.cyotek.com/blog/adjusting-the-jenkins-content-security-policy.

person manuelbcd    schedule 21.03.2018

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

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
person Nakul    schedule 25.01.2019