久しぶりに、Mozilla Observatory でセキュリティチェックを実施したところ、 Analyse your HTTP response headers で警告が新たに上がっていました。      
内容を確認し、対処したので結果を記載します。     
前提
過去に何度か、セキュリティチェックツールは実行していて対処しています。    
基本的な対処する部分は潰していて、対処した後の設定変更の影響、もしくはツールのチェック観点の追加部分への対応と思っていただければいいかなと思います。   
- 
Django製の Mezzanine で構築されたブログに対して http-observatory-cli で 脆弱性を検証してみる | Monotalk 
- 
Observatory by Mozilla で、ウェブサイトのセキュリティをチェックする 2回目 | Monotalk 
実行結果
以下、実行した結果になります。    
Scan results for www.monotalk.xyz    
URL 直接指定なので、対処後に警告内容が変化している可能性があるので、スクリーンショットを添付しておきます。      
出力される警告について
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 の対応状況を抜粋、機能の説明リンクを付与した表になります。
- 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 上で 手軽に実行できる セキュリティチェックツールのおかげで自分も含め、セキュリティ知識のない人でも最低限のラインは確認、修正ができるようになっているように思います。     
ただ、「チェックツールが存在すること」に気づかないケースはあり、「企業単位で気づく人がいない」とセキュリティホールが存在することにはなり、「ツールの存在に気づくソフトウェア脆弱性を攻撃する人」と、「ツールの存在に気づくソフトウェア脆弱性から何かを守る人」が得をするようになった気はしていて、勝負に負ける、勝つが細分化しているとは思いますが、求められるレベルは昔と変わっていないような気もします。                 
参考
警告の対処中に参考にした記事になります。
- Referrer-Policy によるリファラ制御 | blog.jxck.io
- Feature Policy による Permission Delegation | blog.jxck.io
- A new security header: Referrer Policy
- Referrer-Policy - HTTP | MDN
- Introduction to Feature Policy | Web | Google Developers
- javascript - How to set feature policy headers in JS - Stack Overflow
以上です。
コメント