久しぶりに、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-sensorAmbient Light Sensor API - Web APIs MDN完全対応
autoplayHTMLMediaElement.autoplay - Web APIs MDN完全対応
cameraCamera API の利用 - DOM MDN完全対応
document-domainwebappsec-feature-policy/document-write.md at master · w3c/webappsec-feature-policy-
encrypted-mediaEncrypted Media Extensions API - Web APIs MDN完全対応
fullscreenFullscreen API - Web API MDN完全対応
geolocationGeolocation API - Web API MDN完全対応
gyroscopeGyroscope - Web APIs MDN完全対応
layout-animations--
legacy-image-formatsfeature-policy/optimized-images.md at images · loonybear/feature-policy完全対応
magnetometerMagnetometer - Web APIs MDN完全対応
microphoneWeb Audio API - Web API MDN完全対応
midiWeb MIDI API (日本語訳)完全対応
oversized-imageswebappsec-feature-policy/optimized-images.md at master · w3c/webappsec-feature-policy完全対応
paymentPayment Request API: 統合ガイド    Web    Google Developers完全対応
picture-in-picture「Chrome 70」のデスクトップ版でピクチャーインピクチャーが可能に - ITmedia NEWS-
speakerWeb Audio API - Web API MDN完全対応
sync-xhrXMLHttpRequest Standard完全対応
unoptimized-imageswebappsec-feature-policy/optimized-images.md at master · w3c/webappsec-feature-policy完全対応
unsized-mediawebappsec-feature-policy/unsized-media.md at master · w3c/webappsec-feature-policy完全対応
usbWebUSB API完全対応
vibrateVibration API - ウェブデベロッパーガイド MDN完全対応
vrwebxr/explainer.md at master · immersive-web/webxr完全対応
  • OFFにする機能の一覧
    上記からサイト上で使用しない機能をOFFにすることにしました。
    対象は以下になります。
制御機能none は OFFにする
accelerometernone
ambient-light-sensornone
autoplaynone
cameranone
document-domain
encrypted-medianone
fullscreennone
geolocationnone
gyroscopenone
layout-animations
legacy-image-formats
magnetometernone
microphonenone
midinone
oversized-images
paymentnone
picture-in-picturenone
speakernone
sync-xhr
unoptimized-images
unsized-media
usbnone
vibrateChrome でエラーになったので設定しなかった
vrnone
  • 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 上で 手軽に実行できる セキュリティチェックツールのおかげで自分も含め、セキュリティ知識のない人でも最低限のラインは確認、修正ができるようになっているように思います。
ただ、「チェックツールが存在すること」に気づかないケースはあり、「企業単位で気づく人がいない」とセキュリティホールが存在することにはなり、「ツールの存在に気づくソフトウェア脆弱性を攻撃する人」と、「ツールの存在に気づくソフトウェア脆弱性から何かを守る人」が得をするようになった気はしていて、勝負に負ける、勝つが細分化しているとは思いますが、求められるレベルは昔と変わっていないような気もします。


参考

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

以上です。

コメント