web-dev-qa-db-ja.com

Jenkinsコンテンツセキュリティポリシー

Jenkins Content Security Policyについて混乱しています。

私はこれらのサイトを知っています:

Jenkins Clover Plugin経由で表示されるHTMLページがあります。このhtmlページはインラインスタイルを使用します。例:

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

Div要素はプログレスバーを視覚化します。デフォルトのJenkins CSP構成を使用すると、次の結果が得られます。 Progressbar_FAIL

結果は次のようになります。 Progressbar_WORKS

CSPルールを緩和して、異なるレベル(自己、安全でないインライン、..)のパラメーター(script-src、style-src)の異なる組み合わせを追加しようとしましたが、何も機能しません。

だから今の私の質問:

  1. CSP構成はどこで指定する必要がありますか?
  2. インラインスタイルを使用することは可能ですか?
  3. スタイルはどこに配置する必要がありますか?私のcss-stylesheetsはJenkins Serverのローカルにあります。
  4. インラインスタイルとCSPルールを「満たす」ための最良の方法は何ですか

更新

1。試してください:-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self' jenkins.xmlファイル。その後、次のエラーが発生します。

次のコンテンツセキュリティポリシーディレクティブに違反するため、インラインスタイルの適用を拒否しました: "default-src 'self'"。インライン実行を有効にするには、「unsafe-inline」キーワード、ハッシュ(「sha256-」)、またはノンス(「nonce -...」)のいずれかが必要です。また、「style-src」は明示的に設定されていないため、「default-src」がフォールバックとして使用されることに注意してください。

2。 Try-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self' jenkins.xmlファイル。その後、次のエラーが発生します。

次のコンテンツセキュリティポリシーディレクティブ「style-src 'self'」に違反するため、インラインスタイルの適用を拒否しました。インライン実行を有効にするには、「unsafe-inline」キーワード、ハッシュ(「sha256-」)、またはノンス(「nonce -...」)のいずれかが必要です

Default-srcにはstyle-srcが含まれているため、この試行では私の問題を解決できないことを理解しています

3。 Try-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'unsafe-inline' jenkins.xmlファイル。その後、次のエラーが発生します。

スタイルシートs://jenkins/andsomedir/stylesheet.css [https:// ...は、次のコンテンツセキュリティポリシーディレクティブに違反しているため、2つ以上のリンクを投稿することはできません:(]の読み込みを拒否しました: "style-src 「安全でないインライン」」。

27
Thomas

実験中、 コンテンツセキュリティポリシーの設定 ページで説明されているように、スクリプトコンソールを使用してCSPパラメータを動的に調整することをお勧めします。 (Jenkins wikiページには、新しい設定を表示するにはページを強制的に再読み込みする必要がある可能性があることを示す別のメモがあります。)

インラインスタイルとローカルスタイルシートの両方を使用するには、selfunsafe-inline

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

プログレスバーの操作方法によっては、「script-src」も同様に調整する必要があります。

動作する設定を見つけたら、Jenkins起動スクリプトを調整してCSPパラメーター定義を追加できます。

36
Dave Bacher

JenkinsでこのCSPプロパティを永続的に設定することについて明確にするためです。

buntでJenkinsを実行している場合:

  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:;\""

CentOSでJenkinsを実行している場合:

  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

18
de.la.ru

以下のプロパティは私のために働いた。次のプロパティは、すべての外部サーバーを許可します。

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

手順を共有しようとして、私は常にこれらの回避策の1つに従います。ただし、これらの修正の適用は潜在的に安全ではないため、セキュリティ上の制約に注意する必要があります。

  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

1
manuelbcd

私も同様の問題を抱えていました。以下のソリューションは私のために働いた。

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

@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 pluginなどのプラグインにのみ適用できます。電子メールhtmlファイルでは機能しませんでした。

0