久しぶりに、Mozilla Observatory でセキュリティチェックを実施したところ、 Analyse your HTTP response headers で警告が新たに上がっていました。
内容を確認し、対処したので結果を記載します。


前提

過去に何度か、セキュリティチェックツールは実行していて対処しています。
基本的な対処する部分は潰していて、対処した後の設定変更の影響、もしくはツールのチェック観点の追加部分への対応と思っていただければいいかなと思います。


実行結果

以下、実行した結果になります。
Scan results for www.monotalk.xyz
URL 直接指定なので、対処後に警告内容が変化している可能性があるので、スクリーンショットを添付しておきます。
2019-03-12 22.00.47.png - Google ドライブ

出力される警告について

3つ出力されていました。

  • Content-Security-Policy
    これは、以前より出力されていて対処は無理だと思っていた部分で今回も対処はしていません。

  • Referrer-Policy
    これは以前出力されていなかった、もしくは気づいていなかった観点で、今回対処しています。

  • Feature-Policy
    これも以前出力されていなかった、もしくは気づいていなかった観点で、今回対処しています。


警告に対処する

Referrer-Policy,Feature-Policy の内容を調べてそれぞれ対処しました。

Referrer-Policy

サイトからリンクをクリックした場合に、Referrer の送信情報を制御するヘッダです。
Referrer-Policy - HTTP | MDN を確認し、ヘッダを設定しました。
ドキュメントを読んで気になったところを記載します。

  • 気になったところ

    • HTML meta タグ、HTTP ヘッダで設定できる
      HTTP ヘッダでも、HTML meta タグでも設定が可能です。
      HTML meta タグで指定する場合は以下のように記載します。

      <meta name="referrer" content="origin">      
      

    • CSS の Referrer-Policy
      CSS 内に記載されたリソースにアクセスする際の Referrer は、CSS 送信時に 指定された Referrer-Policy の設定に従います。

  • Referrer-Policy として何を指定するか
    このブログは、Mezzanine を使用していて、公開された Web 上に管理画面を持っています。
    以下、2点より、strict-origin-when-cross-origin を設定することにしました。

    • 管理画面からリンクへのアクセスを行うことは頻度は少ないが、発生することがあり、その際は URL を特定されたくない。
    • このサイトはHTTPS でのアクセスのみ許可している。外部へのリンクも HTTPS で基本貼っている。
  • Apache での Referrer-Policyの設定
    Apache での 設定は以下の通りです。

    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    

Feature-Policy

ブラウザの機能の ON/OFF を切り替えることができる ヘッダです。
サイトとして ブラウザ機能を全て使わないのであれば、機能をOFFにすることでサイトの改竄が行われても機能として使用を制限することができます。
また、場合によっては、パフォーマンスに悪影響を与える機能を OFF にすることで、画面描画の遅延を防止することもできます。

  • ブラウザのサポート状況
    Feature Policy - HTTP | MDN を見る限り、Referrer-Policy よりも対応ブラウザが少ないです。Opera と Chrome のサポートが進んでいます。

  • Feature-Policy のデモサイト
    Feature-Policy の動作を確認できるサイトがありました。
    ON/OFF で どのような動きになるかが確認できます。
    Feature Policy Kitchen Sink

  • Feature-Policy として何を指定するか
    以下、Feature Policy - HTTP | MDN のデスクトップChrome の対応状況を抜粋、機能の説明リンクを付与した表になります。

制御機能 機能の説明へのリンク デスクトップChrome
accelerometer デバイスの方向の検出 - Web API MDN 完全対応
ambient-light-sensor Ambient Light Sensor API - Web APIs MDN 完全対応
autoplay HTMLMediaElement.autoplay - Web APIs MDN 完全対応
camera Camera API の利用 - DOM MDN 完全対応
document-domain webappsec-feature-policy/document-write.md at master · w3c/webappsec-feature-policy -
encrypted-media Encrypted Media Extensions API - Web APIs MDN 完全対応
fullscreen Fullscreen API - Web API MDN 完全対応
geolocation Geolocation API - Web API MDN 完全対応
gyroscope Gyroscope - Web APIs MDN 完全対応
layout-animations - -
legacy-image-formats feature-policy/optimized-images.md at images · loonybear/feature-policy 完全対応
magnetometer Magnetometer - Web APIs MDN 完全対応
microphone Web Audio API - Web API MDN 完全対応
midi Web MIDI API (日本語訳) 完全対応
oversized-images webappsec-feature-policy/optimized-images.md at master · w3c/webappsec-feature-policy 完全対応
payment Payment Request API: 統合ガイド    Web    Google Developers 完全対応
picture-in-picture 「Chrome 70」のデスクトップ版でピクチャーインピクチャーが可能に - ITmedia NEWS -
speaker Web Audio API - Web API MDN 完全対応
sync-xhr XMLHttpRequest Standard 完全対応
unoptimized-images webappsec-feature-policy/optimized-images.md at master · w3c/webappsec-feature-policy 完全対応
unsized-media webappsec-feature-policy/unsized-media.md at master · w3c/webappsec-feature-policy 完全対応
usb WebUSB API 完全対応
vibrate Vibration API - ウェブデベロッパーガイド MDN 完全対応
vr webxr/explainer.md at master · immersive-web/webxr 完全対応
  • OFFにする機能の一覧
    上記からサイト上で使用しない機能をOFFにすることにしました。
    対象は以下になります。
制御機能 none は OFFにする
accelerometer none
ambient-light-sensor none
autoplay none
camera none
document-domain
encrypted-media none
fullscreen none
geolocation none
gyroscope none
layout-animations
legacy-image-formats
magnetometer none
microphone none
midi none
oversized-images
payment none
picture-in-picture none
speaker none
sync-xhr
unoptimized-images
unsized-media
usb none
vibrate Chrome でエラーになったので設定しなかった
vr none
  • Apache での Feature-Policy の設定
    以下、Feature-Policy を設定しました。

    Header always set Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'none'; camera 'none'; encrypted-media 'none'; fullscreen 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none';microphone 'none'; midi 'none';payment 'none';picture-in-picture 'none';speaker   'none';usb  'none';vr 'none'"     
    

  • vibrate でエラー
    vibrate を設定したところ、以下 エラーが発生したので設定しませんでした。
    security - How can I add in Apache Feature Policy Header? - Server Fault
    Chrome の Versionは 72.0.3626.121 ですが 機能が削除されたか、未対応なのかと思います。

  • Error with Feature-Policy header: Unrecognized feature: ‘speaker’.
    django-feature-policy · PyPI をみる限り、speakerは削除されたようです。
    後日、設定を削除しました。

  • Error with Feature-Policy header: Unrecognized feature: ‘vr’.
    Feature-Policy: xr - HTTP | MDN に記載がありますが、vr は削除されたようです。
    後日、設定を削除しました。


Django の plugin について

それぞれの Policy 設定用の Plugin があるか確認しました。

Django での Reffer-Policy の設定

Django の Plugin として django-referrer-policy がありました。
django-referrer-policy · PyPI
Middleware で Reffer-Policy が設定できるようです。

Django での Feature Policy の設定

Django の Plugin として、django-feature-policy がありました。
django-feature-policy · PyPI
Feature Policy は 設定項目が多いので、Plugin を使用する方がメンテナンスがしやすいかもしれません。


チェックツールについて思うこと

Web 上で 手軽に実行できる セキュリティチェックツールのおかげで自分も含め、セキュリティ知識のない人でも最低限のラインは確認、修正ができるようになっているように思います。
ただ、「チェックツールが存在すること」に気づかないケースはあり、「企業単位で気づく人がいない」とセキュリティホールが存在することにはなり、「ツールの存在に気づくソフトウェア脆弱性を攻撃する人」と、「ツールの存在に気づくソフトウェア脆弱性から何かを守る人」が得をするようになった気はしていて、勝負に負ける、勝つが細分化しているとは思いますが、求められるレベルは昔と変わっていないような気もします。


参考

警告の対処中に参考にした記事になります。

以上です。

コメント