概要
Jenkinsの中から外部リンクを作成した場合などに発生するHTTPリクエストの中にリファラが入ってるという話を聞いて、プログラム本体を改造しないで何か対処できないか試してみました。
結論から言うと
- Simple Theme Plugin で任意のJavaScriptを読込設定できるため、
JavaScriptでHEADのメタタグにreferrer=no-referrerを追加する。 - ジョブ別であれば、おそらくjQueryプラグイン内で似たようなことは出来そう(未検証)
Reffererの制御自体は以下を参考にしました。
Qiita: Referrer を制御する
あらまし
事の始まりはJenkinsから発行されるHTTPリクエストにリファラがついていて、社内サーバーのドメイン名が見えるのがよろしくない、という話を聞いたことから始まります。
まあ、細かいセキュリティの話はさておき、静的なHTMLであればHEADにMETAタグ追加すれば良い話。
あるいはApacheサーバー側の設定か。
ただ、今のJenkins鯖はaptでパッケージ取得してapt-get upgradeでバージョンアップについていく方法を採用しており、
jenkins.warファイル内の中身を書き換えてしまうとバージョンアップの都度ローカル修正が必要になってしまい、あまりおいしくない。
Jenkinsのバージョンアップがけっこう激しいことを考えるとけっこうシンドイ。
HTMLのHeadを自由に編集できる機能もなく、そういうプラグインもなかったので、代替としてSimple Themeプラグインが持つScriptのロード機能を利用してDOMをいじる方式を採用してみました。
手順
1.トップ画面左側のJenkinsのメニューからJenkinsの管理を選ぶ
2.メイン画面側の設定メニューからプラグインの管理を選ぶ
3.インストール可能タブから「Simple Theme Plugin」をインストール
4.Jenkins再起動後、システム設定から「Theme」セクションのURL of theme JSにuserContent/noRefer.jsを指定する。
5.JENKINS_HOMEで指定されたディレクトリにuserContentディレクトリが出来ているため、その中にnoRefer.jsを以下の内容で設定する。
// ドキュメントのロード時、headタグにリファラの設定を追加
window.addEventListener("load", function() {
var head = document.querySelector('head');
var noReffer = document.createElement('meta');
noReffer.setAttribute('name','referrer');
noReffer.setAttribute('content','no-referrer');
var noRefferNever = document.createElement('meta');
noRefferNever.setAttribute('name','referrer');
noRefferNever.setAttribute('content','never');
head.appendChild(noReffer);
head.appendChild(noRefferNever);
}, false);
上記設定後、Jenkinsの各ページのHTMLヘッダタグを確認すると
<meta name="referrer" content="no-referrer">
<meta name="referrer" content="never">
がついており、その後のHTTPリクエストを見ても REFERRER が出てこなくなったので多分これでうまく行ってる、っぽい。