it-swarm.com.de

Inhaltssicherheitsrichtlinie von Jenkins

Ich bin verwirrt über die Content Security Policy von Jenkins.

Ich kenne diese Seiten:

Ich habe eine HTML-Seite über das Jenkins Clover Plugin. Diese HTML-Seite verwendet einen Inline-Stil, z.

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

Das div-Element visualisiert eine Fortschrittsleiste. Die Verwendung der Standard-CSP-Konfiguration von Jenkins führt zu folgendem Ergebnis: Progressbar_FAIL

Das Ergebnis, das ich haben möchte, sieht folgendermaßen aus: Progressbar_WORKS

Ich habe versucht, die CSP-Regeln zu lockern, indem ich verschiedene Kombinationen von Parametern (script-src, style-src) mit verschiedenen Ebenen (self, unsafe-inline, ..) hinzufügte, aber nichts funktioniert.

Also meine Fragen vorerst:

  1. Wo muss ich die CSP-Konfiguration angeben? 
  2. Kann man Inline-Styles verwenden? 
  3. Wo sollen sich die Stile befinden? Meine CSS-Stylesheets befinden sich lokal auf dem Jenkins Server. 
  4. Was ist der beste Weg, um Inline-Style und CSP-Regeln "zufrieden" zu machen?

Update 

1. Versuchen Sie:-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self' In der Datei jenkins.xml. Dann tritt der folgende Fehler auf: 

Weigerte sich, den Inline-Stil anzuwenden, da er die folgenden .__ verletzt. Richtlinie zur Inhaltssicherheitsrichtlinie: "default-src 'self'". Entweder Schlüsselwort 'unsafe-inline', ein Hash ('sha256-') oder eine Nonce ('nonce -...') ist erforderlich, um die Inline-Ausführung zu ermöglichen. Beachten Sie auch, dass 'style-src' wurde nicht explizit gesetzt, daher wird 'default-src' als .__ verwendet. Zurückfallen.

2. Versuchen Sie-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self' in der Datei jenkins.xml. Dann tritt der folgende Fehler auf: 

Weigerte sich, den Inline-Stil anzuwenden, da er die folgenden .__ verletzt. Richtlinie zur Inhaltssicherheitsrichtlinie: "style-src 'self'". Entweder Schlüsselwort "unsafe-inline", Hash ('sha256-') oder eine Nonce ('nonce -...') ist erforderlich, um die Inline-Ausführung zu ermöglichen

Ich verstehe, dass dieser Versuch mein Problem nicht lösen kann, da default-src style-src enthält

3. Versuchen Sie-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'unsafe-inline' in der Datei jenkins.xml. Dann tritt der folgende Fehler auf: 

Weigerte sich, das Stylesheet zu laden s: //jenkins/andsomedir/stylesheet.css [Sein https: // ... darf nicht mehr als zwei Links posten: (] , weil dies gegen die folgende Richtlinie zur Richtlinie zur Inhaltssicherheit verstößt: "style- src 'unsafe-inline' ".

21
Thomas

Beim Experimentieren empfehle ich die Verwendung der Skriptkonsole, um den CSP-Parameter dynamisch anzupassen, wie auf der Seite Konfigurieren der Inhaltssicherheitsrichtlinie beschrieben. (Auf der Wiki-Seite von Jenkins gibt es einen weiteren Hinweis, der Sie darauf hinweist, dass Sie die Seite möglicherweise neu laden müssen, um die neuen Einstellungen anzuzeigen.)

Um sowohl Inline-Styles als auch lokale Stylesheets verwenden zu können, müssen Sie self und unsafe-inline hinzufügen:

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

Abhängig davon, wie die Fortschrittsleiste bearbeitet wird, müssen Sie möglicherweise 'script-src' auf dieselbe Weise anpassen. 

Wenn Sie eine funktionierende Einstellung gefunden haben, können Sie das Jenkins-Startskript anpassen, um die CSP-Parameterdefinition hinzuzufügen. 

27
Dave Bacher

Nur um klar zu sein, wie man diese CSP-Eigenschaft dauerhaft auf Jenkins setzt.

Wenn Sie Jenkins unter Ubuntu ausführen:

  1. $ vim /etc/default/jenkins
  2. Suchen Sie die Zeile mit Java_ARGS und fügen Sie die CSP-Richtlinie wie folgt hinzu: Java_ARGS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

Wenn Sie Jenkins unter CentOS betreiben:

  1. $ vim /etc/sysconfig/jenkins
  2. Suchen Sie die Zeile mit JENKINS_Java_OPTIONS und fügen Sie die CSP-Richtlinie wie folgt hinzu: JENKINS_Java_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src data:;\""

Speichern Sie die Datei und starten Sie Jenkins .$ Sudo service jenkins restart oder in Ihrem Browser http://localhost:8080/safeRestart neu.

15
de.la.ru

Die folgenden Eigenschaften haben für mich funktioniert. Die folgenden Eigenschaften ermöglichen alle externen Server.

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';")
1
kolukuri

Beim Versuch, meine Prozeduren mitzuteilen, folge ich immer einer der Workarounds. Sie müssen jedoch auf Ihre Sicherheitsbeschränkungen achten, da die Anwendung dieser Fixes möglicherweise unsicher ist.

  1. Zeitliche Korrektur:

Gehen Sie zur Jenkins-Konsole und wenden Sie die folgenden Befehle an, je nachdem, welche Art von CSP-Richtlinien Sie wünschen.

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

Diese Problemumgehung richtet sich an zeitliche Tests oder eine Entwicklungsumgebung.

Wenn Sie es ändern möchten, fügen Sie dies beim Ausführen der Anwendung dauerhaft zum Java-Befehl hinzu:

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

Abschließend empfehle ich Ihnen dringend, diese Artikel zu lesen:

Offizielle Jenkins-Dokumentation https://wiki.jenkins.io/display/JENKINS/Configuring+Content+Security+Policy

Problemumgehungen, um CSP-Regeln vorübergehend oder dauerhaft zurückzusetzen: https://www.cyotek.com/blog/adjusting-the-jenkins-content-security-policy

1
manuelbcd

Ich hatte auch ein ähnliches Problem. Die untenstehende Lösung hat für mich funktioniert.

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
0
Nakul

Um mehr zur Antwort von @ Kirill hinzuzufügen ...

Wenn jenkins im Tomcat-Container bereitgestellt wird, legen Sie den CATALINA_OPTS-Umgebungswert in setenv.sh file (in ${CATALINA_BASE}/bin-Ordner vorhanden) wie folgt hervor:

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

oder 

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 *;\

Starten Sie nach dem Ändern der obigen Datei die Tomcat neu. Es funktionierte für mich wie ein Zauber. Ich hoffe es hilft :)

Hinweis: - CSP ist nur für Plugins wie HTML-Publisher und Maven-Plugin anwendbar. Es funktionierte nicht für E-Mail-HTML-Datei.

0