以前、
Content Security Policy (CSP) の report を 10 日くらい集計して、ポリシーを見直す(の途中) | Monotalk
で、Content Security Policy を集計し、修正を行いましたが、
最近 AMP 向けの HTML を作成したため、未定義のドメインでエラーが出ているので、
再集計して、ポリシー 定義を見直したいと思います。


CSP の report の結果に影響しそうなことで、最近実施したこと

最近実施したことで CSP の report の結果に影響しそうなことは以下になります。

  • Google Tag Manager の設置

  • AMP 対応


現在のポリシー定義

現状のポリシー定義は以下の通りです。

Content-Security-Policy-Report-Only:
default-src 'self'; frame-src 'self' googleads.g.doubleclick.net staticxx.facebook.com *.disqus.com disqus.com; 
script-src 'self' 'unsafe-inline' 'unsafe-eval' pagead2.googlesyndication.com www.google-analytics.com *.disqus.com c.disquscdn.com; style-src 'self' 'unsafe-inline' *.disquscdn.com; 
img-src 'self' *.disqus.com *.disquscdn.com *.googleusercontent.com *.google.com *.googledrive.comgoogledrive.com data:;
connect-src 'self' *.disqus.com;
font-src 'self' fonts.gstatic.com;
report-uri /report/


CSPのレポートデータの収集と、集計について

Content Security Policy (CSP) の report を 10 日くらい集計して、ポリシーを見直す(の途中) | Monotalk
記載している内容と変わりはないため、省略します。


集計と、修正方針

violated-directive ごとの、blocked-uri集計、その結果を元に、ポリシー 定義を修正していきます。1
前回 Google データスタジオを使ってましたが、MAC の Chrome が何故かクラッシュするようになり、
MongoDB のクエリによる集計に切り替えました.

集計のため、以下のような Mongo script を作成しました。

  • countViolatedDirectiveGroupByBlockedUri.js
    var count = 0;
    // Query
    db.reports.aggregate([
        {
            $match: {
                "violated-directive": violatedDirective,
                create_date: {$gte: ISODate(createDate)}
            }
        },
        {
            $group: {
                "_id": {
                    "blocked-uri": "$blocked-uri"
                },
                "count": {
                    "$sum": 1
                }
            }
        },
        {
            $sort: {
                "count": -1
            }
        }
    ]).forEach(function(element){
      if(count == 0) {
        print("###violated-directive = " + violatedDirective + "###")
        print("|" + "count" + "|" + "blocked-uri" + "|");
        print("|:-------------------|:--------------|");
      }
      count++;                                                                                                                                                                          
      print("|" + element.count + "|" + element._id["blocked-uri"] + "|");
    });
    

コマンドラインからは、以下のように実行できます。

mongo localhost/csp_analyze --quiet --eval "var violatedDirective='script-src', createDate='2017-05-08T00:00:00.0Z'" countViolatedDirectiveGroupByBlockedUri.js

violated-directive ごとの blocked-uri集計結果

violated-directive : script-src での 集計

  • 結果
件数リソース名
4171https://disqus.com/next/config.js
1838https://www.googletagmanager.com/gtm.js?id=GTM-534QXXZ
1787https://ssl.google-analytics.com/ga.js
286https://cdn.ampproject.org/v0/amp-sidebar-0.1.js
286https://cdn.ampproject.org/v0.js
285https://cdn.ampproject.org/v0/amp-form-0.1.js
214https://cdn.ampproject.org/v0/amp-carousel-0.1.js
214https://cdn.ampproject.org/v0/amp-accordion-0.1.js
212https://cdn.ampproject.org/v0/amp-ad-0.1.js
212https://cdn.ampproject.org/v0/amp-analytics-0.1.js
169https://cdn.ampproject.org/v0/amp-iframe-0.1.js
15about
14data
9https://tagmanager.google.com/debug/debuguiApp.js
9https://tagmanager.google.com/debug/angular-bundle.js
9https://tagmanager.google.com/debug/api/templates?templates=e%2Ce&callback=angular.callbacks._0
9https://tagmanager.google.com/debug
8https://cdn.ampproject.org/v0/validator.js
4https://cdn.ampproject.org/v0/amp-live-list-0.1.js
2https://max-x.men/code/pid/675995_BNX.js?rev=0271
2https://ssl.google-analytics.com
2https://max-x.men/code/pid/linkcheck.js?rev=0271
2https://max-x.men/code/pid/675995_ALL.js?rev=0271
2https://xx.xcetkbl.com/server/rfdls.php?ref1=brow_zyp&guid=395049983_397234_CC9C47EB
  • 各ドメインごとの設定要否
    script-src は、設定をしていなかったのが、許可設定していたつもりだった ドメイン まで、report 対象になっていました。

    • disqus.com
      disqus のドメインなので許可します。

    • www.googletagmanager.com
      goolge tag manager の ドメインなので、許可します。

    • ssl.google-analytics.com
      google analytics の ドメインなので、許可します。

    • cdn.ampproject.org
      amp の cdn の ドメインなので、許可します。

    • about
      こちらは、よくわからなかったので調べたところ以下の記事を見つけました。
      ブラウザのAddOnが影響して、CSPのポリシー違反となるようです。一旦無視します。
      apache 2.4 - Content security policy: blocked uri “about” - Server Fault
      content security policy - Why would I get a CSP violation for the blocked-uri ‘about’? - Stack Overflow

    • data URLでのコンテンツの埋込 による、エラーです。
      基本的にやってないのですが、adsense などがやったりしているのかもしれません。
      一旦無視して様子を見ます。

    • max-x.men
      aguse.jp: ウェブ調査調べた限りはSpam サイトではないようです。
      ユーザのブックマークレット的なものの設定で出ているのかもしれません。
      一旦無視して様子を見ます。

    • xx.xcetkbl.com これは前回も見ました。
      aguse.jp: ウェブ調査調べた限りはSpam サイトではないようです。
      一旦無視して様子を見ます。

violated-directive : style-src での 集計

  • 結果
countblocked-uri
11https://tagmanager.google.com/debug/css.css
11https://fonts.googleapis.com/icon?family=Material+Icons+Extended
  • 各ドメインごとの設定要否
    以下、ドメインですがサイト上にリンク貼っているわけではないですが、
    違反ポリシーが記録されていました。
    こちら、何故記録されていたかというと、google tag manager の debug 時にどうも記録されるようです。

    • tagmanager.google.com
      タグマネージャのサイトのドメインです。 デバック起動時に読み込まれるようなので、許可設定しました。

    • fonts.googleapis.com こちらは、タグマネージャのデバッグウィンドウを切り替えてると、
      fontの読み込みが行われますが、その際に設定されていました。
      許可設定しました。

violated-directive : frame-src での 集計

  • 結果
countblocked-uri
88https://kemsakurai.github.io
7https://xx.xcetkbl.com
1https://d-16772114932630796498.ampproject.net
1https://d-33863827391112155177.ampproject.net
1https://d-27121814062614782055.ampproject.net
1data
1http://swg-msg.securewg.jp
1https://gateway.zscalertwo.net
  • 各ドメインごとの設定要否

    • kemsakurai.github.io
      自分自身のgithub.ioドメインです。
      これは許可しておきます。

    • xx.xcetkbl.com また、こいつがいます。
      aguse.jp: ウェブ調査調べた限りはSpam サイトではないようです。
      一旦無視して様子を見ます。

    • d-16772114932630796498.ampproject.net 等
      これは、amp ページの場合に、読み込まれる、https://d-3111818505141536503.ampproject.net/1499459975276/frame.html
      いった形式のiframe で出力されていました。
      実際何に使用しているのか不明ですが、必ず出るようなので、許可設定しておきます。

    • data
      件数が少ないため、一旦無視して様子を見ます。

    • gateway.zscalertwo.net
      これは、セキュリティソフトミドルウェアで出力されているように思います。
      件数が少ないため、一旦無視して様子を見ます。
      Zscaler - 製品情報|ノックス株式会社

    • swg-msg.securewg.jp
      これも、セキュリティソフトミドルウェアで出力されているように思います。
      件数が少ないため、一旦無視して様子を見ます。
      WebセキュリティならWebゲートウェイサービス - IIJ

violated-directive : connect-src での 集計

  • 結果
countblocked-uri
160https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
94https://3p.ampproject.net/1498868275630/f.js
36https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P......
32https://3p.ampproject.net/1498157073711/f.js
13https://3p.ampproject.net/1499459975276/f.js
12https://3p.ampproject.net/1498686280171/f.js
11https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P......
11https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P......
7https://3p.ampproject.net/1499361527811/f.js
3https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P.......
3https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P.......
3https://www.googletagmanager.com/amp.json?id=GTM-5KQPP3P.......
2https://3p.ampproject.net/1498506512561/f.js
1https://d-8663767972041812495.ampproject.net/1498868275630/frame.html
1https://csi.gstatic.com/csi?v=2&s=pagead&action=csi_pagead&puid=1~j4l1588c&c=2299636121392

violated-directive : img-src での 集計

  • 結果
countblocked-uri
133https://googledrive.com/host/0By5O5w7iwOMOcnhRVndXNVZLLTA/2016-01-10_14.58.17.png
36http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOYmx6MVlwdzFHTUk
36http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOZlFiUHo1ZjdqeEk
35http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOWmMybXZQWV8wTkU
35http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOc09ZWXBQWFd5QTA
33http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOUnlPWk81ZXJ0MGM
27http://drive.google.com/uc?export=view&id=0By5O5w7iwOMORGR3ZXFlMldIX0U
26https://www.gstatic.com/images/branding/product/2x/translate_24dp.png
21https://www.monotalk.xyz
21https://www.monotalk.xyz/favicon.ico
15http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOQ25EZFNvQ2NfQkk
9https://ssl.gstatic.com/analytics/header/legacy/v1/ic_tag_manager.svg
9https://www.gstatic.com/images/icons/material/system/1x/keyboard_arrow_up_white_48dp.png
7https://ir-jp.amazon-adsystem.com/e/ir?t=kemsakurai-22&l=am2&o=9&a=B00NWOJ8PY
7https://ir-jp.amazon-adsystem.com/e/ir?t=kemsakurai-22&l=am2&o=9&a=B00PLUSWRW
7https://ir-jp.amazon-adsystem.com/e/ir?t=kemsakurai-22&l=am2&o=9&a=4839935483
7http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOSHVYZUJ4aWxfOFU
7http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOeFliT2xocUs4Y0E
6http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOeHlySVBtWk5ZVWM
6http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOSXdleklpRG1YbFk
4http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOTzVyVVlaQ0R4Ync
4https://googledrive.com/host/0By5O5w7iwOMOcnhRVndXNVZLLTA/2016-01-19_0.12.42.png
3http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOMmY4bUl0Y25JelU
3http://drive.google.com/uc?export=view&id=0By5O5w7iwOMOZkNKU1dJSmlRUnM
3ms-browser-extension
  • 各ドメインごとの設定要否
    ここは、設定自体してなかったのか、過去に設定した覚えのあるドメインが多く出力されていました。

    • googledrive.com
      Google Drive のドメインです。許可します。

    • drive.google.com
      Google Drive のドメインです。許可します。

    • www.gstatic.com
      Google の CDI のドメインです。許可します。

    • www.monotalk.xyz
      自サイトのドメインです。許可します。

    • ssl.gstatic.com
      Google の CDI のドメインです。許可します。

    • ir-jp.amazon-adsystem.com
      Amazon アソシエイトのドメインです。許可します。

    • ms-browser-extension
      IEのブラウザのplugin かなにかで出力されているようです。一旦無視します。
      CSP Report 収集と実レポートの考察 | blog.jxck.io

violated-directive : font-src での 集計

  • 結果
countblocked-uri
55data
10http://themes.googleusercontent.com/static/fonts/inconsolata/v5/BjAYBlHtW3CJxDcjzrnZCIbN6UDyHWBl620a-IRfuBk.woff
10http://themes.googleusercontent.com/static/fonts/rosarivo/v1/OGdIq-p0tOtBN2VMVvO9W_esZW2xOQ-xsNqO47m55DA.woff
1https://sxt.cdn.skype.com/assets/fonts/SkypeAssets-Light.woff
1https://sxt.cdn.skype.com/assets/fonts/SkypeAssets-Regular.ttf
1https://css.zohostatic.com/projects/f0/fonts/ProximaNova-Reg-webfont.woff
1https://sxt.cdn.skype.com/assets/fonts/SkypeAssets-Light.ttf
1https://css.zohostatic.com/projects/f0/fonts/ProximaNova-Reg-webfont.ttf
1https://sxt.cdn.skype.com/assets/fonts/SkypeAssets-Regular.woff
1https://css.zohostatic.com/projects/f0/fonts/ProximaNova-Sbold-webfont.ttf
1https://css.zohostatic.com/projects/f0/fonts/ProximaNova-Sbold-webfont.woff
  • 各ドメインごとの設定要否
    ここは、正直何をトリガーで読み込みにいっているのか、
    よくわかりませんでした。一旦無視します。
    • themes.googleusercontent.com
    • sxt.cdn.skype.com
    • css.zohostatic.com

violated-directive : object-src での 集計

  • 結果
countblocked-uri
35https://pagead2.googlesyndication.com

変更後のポリシー定義

出力された定義

変更後のポリシーは以下の通りです。

Content-Security-Policy-Report-Only:
script-src 'self' 'unsafe-inline' 'unsafe-eval' pagead2.googlesyndication.com www.google-analytics.com *.disqus.com c.disquscdn.com 
disqus.com *.googletagmanager.com *.google-analytics.com *.ampproject.org;
style-src 'self' 'unsafe-inline' *.disquscdn.com *.google.com *.googleapis.com;
default-src 'self';
frame-src 'self' googleads.g.doubleclick.net staticxx.facebook.com *.disqus.com disqus.com kemsakurai.github.io *.ampproject.net;
img-src 'self' *.disqus.com *.disquscdn.com *.googleusercontent.com *.google.com *.googledrive.comgoogledrive.com data: googledrive.com drive.google.com www.gstatic.com www.monotalk.xyz ssl.gstatic.com ir-jp.amazon-adsystem.com ssl.google-analytics.com; 
connect-src 'self' *.disqus.com; 
object-src pagead2.googlesyndication.com; 
font-src 'self' fonts.gstatic.com; 
report-uri /report/


追記

firefox で変更後ポリシーを確認していたところ、
Content Security Policy: ディレクティブ ‘frame-src’ は<wbr>推奨されません。<wbr>代わりに<wbr>ディレクティブ ‘child-src’ を<wbr>使用してください。<wbr>
いうメッセージが出力されていました。
CSP ディレクティブ frame-src が child-src に置き換えられる形で廃止予定となりました | Firefox サイト互換性情報
とのことで、frame-src を child-src に変更しました。


今後

まだ、ポリシー ON にはできない印象です。
2、3ヶ月後に、再度実行して経過を観察しようと思います。
以上です。

コメント