役に立つ話。
どういうアレか
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で良くて、受け取ってまとめてくれるサービスもある。

1ヶ月で終わらせられるなら無料版を使えばいいし、金を払ってもいいし。
終りが見えない上にお金を出すのはちょっと、という場合は受け取ったjsonをどうのこうのするためのものを書く必要がある。
やっていく
これをパクれば一発。
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」でやっていけとか言われてる。

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