先日、Security HeadersというSophosがスポンサーのHTTPヘッダチェックツールで、ヘッダーのチェックが簡単にできることを知ったのでこの機会に一通り整えてみた。

このツールでチェックしているのは以下の項目。

特に気にして設定していない場合、未設定のままのサーバも多いのではないだろうか。

もちろん、設定次第ではもともと動いていたウェブサイトが動かなくなるケースもあるので、気を付けて設定する必要はあるが、よりセキュアなウェブサイトにするためにはきちんと設定しておくのがよさそうだ。

それぞれの項目の意味を簡単に述べると、

X-Frame-Options

iframeタグを用いて何らかのURLを表示する際に、その閲覧先を制限する。
有効な値は”SAMEORIGIN”, “DENY”, “ALLOW FROM URL”
それぞれ、「同一ドメインの表示のみ有効」、「iframeの表示の拒否」、「特定のURLのみ有効」となる。
当サイトの場合は通知設定でiframeを使っているのでSAMEORIGINにしてみた。

X-Content-Type-Options

有効な値は”nosniff”のみという非常にシンプルな項目だ。
効果としてはserverで指定したContent-Typeを無視してブラウザが自動的に判別する(MIME Sniffing)ことを防ぐ。基本的にはIEで行われているようだ。
便利に働くケースもあるようだが基本的にserverで指定した通りの動作をしてほしい場合が大半なうえに、XSSが可能になってしまう場合もあるためきちんとnosniffで設定しておくのが良いようだ。

X-XSS-Protection

ブラウザが備えているXSS protection機能を制御する効果がある。
0 で無効に、1 で有効にする。1にする場合はさらに”mode=block”とすると害があると判断されたときにブロックできる。

こちらも”1; mode=block”の設定で問題なさそうだ。

Referrer-Policy

この項目はあるページから別なページに移動した際に、リファラとしてどの程度の情報を渡すかという項目。
有効な値が8種ほどあり、ちょっと複雑にはなるがSecurity Header作者の解説記事がわかりやすくまとまっている。
大雑把には、リファラとして「URL全て」、「”https://{ドメイン}”のみ」、「null」のどれを渡すかと、
移動先が「同一Origin」、「http」、「別Origin」等の条件の組み合わせで動作を制御できる。

当サイトでは”no-referrer-when-downgrade”という、httpsからhttpのサイトへ移動した場合にはリファラを渡さないという設定を採用した。

Content-Security-Policy

この項目は画像やスクリプト等に関して、それぞれどういったURL、形式なら読み込むかという情報を個別に具体的に設定できる。
最もセキュアな設定にするなら、具体的に読み込むファイルを指定することになるだろうか。
一般的なウェブサイトでは、外部URLからスクリプトを読み込むことをほとんどのサイトがやっているだろう(Google Analyticsや各種ライブラリをCDNから読み込む等)。そのため、具体的に設定するのはやや難しい。
ウェブアプリの場合なら、具体的に設定しやすいケースが多いかもしれない。

具体的に対象を指定する以外に、”block-all-mixed-content”、”upgrade-insecure-requests”といったhttpsサイトでのhttpでの読み込みの拒否やhttpのものを自動的にhttpsでの接続にする設定もある。

当サイトでは”block-all-mixed-content”を採用した。

Strict-Transport-Security

この項目を設定すると2度目以降のアクセス時に、「httpでの接続をさせないで、httpsで接続させる」といったことができる。
リダイレクトでhttpsでのURLに飛ばす場合と異なり、httpでの接続自体をさせないため、中間者攻撃等をより厳格に防ぐことになるようだ。

一通りの設定をすると、Security Headersでの診断において最高ランクのA+が達成される。

ただし、これらの設定によってWordPressだと、一部の機能が制限される場合がある。…

ログインして続きを読む