[php]CSPのレポート出力(report-uri)をやっていく方法

役に立つ話。

どういうアレか

CSPの設定をやっていくと、何がブロックされてるとか、例えばChromeの検証で見ることがある。それはそれでいいんだけどログとして残したい場合がある。

出力する機能が備わってるんで、使っていこうねという話。

基本の話(Content-Security-Policy-Report-Only)

ぶっつけ本番でCSPを設定して、駄目な状態だったらWEBサイトの動作に関わってよろしくない。

実際にCSPを設定する「Content-Security-Policy」の他に、「Content-Security-Policy-Report-Only」がある。「こんな設定だったらどうだ」を可視化するためのもんだと思えばいい。詳細は真面目なサイトが書いてあるから割愛。

phpだと例えばこんな感じで書く。

header("Content-Security-Policy-Report-Only: default-src 'self'; report-uri https://example.jp/cspReport/");

まあCSPと同じなんですよ。ぶっつけでやっていいならCSPに直書きしていいんですよ。

今回は「report-uri」の話。

report-uriとは

こういうやつをこういうアレでブロックしたわ、をjson形式で飛ばしてくれる。飛ばし先は任意のURLで良くて、受け取ってまとめてくれるサービスもある。

Welcome to report-uri.com
Detect attacks like Magecart, and other hostile JavaScript on your site, fast!

1ヶ月で終わらせられるなら無料版を使えばいいし、金を払ってもいいし。

終りが見えない上にお金を出すのはちょっと、という場合は受け取ったjsonをどうのこうのするためのものを書く必要がある。

やっていく

これをパクれば一発。

HTTP - CSP: report-uri - HTTP Content-Security-Policy (CSP)ヘッダーの report-uri 指令は、ブラウザが CSP ポリシー違反の試みを報告するための URI を指定するために使用されます。

Examplesのコードを丸パクリして、「admin@example.com」を自分のメールアドレスに変更する。

作ったphpファイルをサーバーにアップして、URLをreport-uriの後に書き込む。

これの発火はページの読込み時で、発火したら項目別にメールが飛んでくる。必要最低限のメール送信なので迷惑メールに入ってると思う。そこらへんをきちんとしたければ送信部分を編集しましょう。

Content-Security-Policy: default-src https:; report-uri 【作ったphpのURL】

とりあえず上記みたいに最低限で書いておけば、CDNとかを使ってたらメールが来るはず。

動作確認ができたらCSPの中身を引っ張ってきて、ブロックがあるかどうかチェックする。

そんな感じで。

$log_file」は「csp-violations.log」を指定の場所にアップしておけば中に書き込んでくれる。ファイル生成の記述は無いので、逆に言えばアップしないと書き込まれない。

アクセスするたびに発火して邪魔くさいので、使わないときはコメントアウトするなりして外してください。

一応

「report-uri」は旧いらしい。「report-to」でやっていけとか言われてる。

CSP: report-uri - HTTP | MDN
HTTP の Content-Security-Policy (CSP) における report-uri ディレクティブは非推奨で、ディレクティブは、コンテンツセキュリティポリシーに違反する試みを報告するよう、 ユーザーエージェントに指示し...

とりあえず現状「report-uri」で動いてるというのと、「report-to」の対応状況が微妙っていうのと。上手いことやってください。

コメント

タイトルとURLをコピーしました