当社の診断ツールで自社サイトを調べたら、7項目中6項目が未設定でした

株式会社フィーノ

当社では、ホームページの安全性を簡単に確かめられる「Webサイトセキュリティ診断」を公開しています。URLを入れて「確認する」を押すと、20〜40秒ほどで結果が出ます。

先日、このツールで当社のサイト(fi-no.co.jp)を調べました。セキュリティヘッダーの欄は、7項目のうち6項目が「なし」でした。お客様のサイトの点検をお手伝いしている会社として、自分のサイトがこの状態だったのは反省点です。10月25日に設定を済ませましたので、行ったことと結果をご報告します。

診断ツールでわかること

このツールは、ドメイン名かURLを1つ入れるだけで、次の4つをまとめて調べます。

  • SSL証明書:有効期限が切れていないか、通信がきちんと暗号化されているか
  • セキュリティヘッダー:ブラウザに安全のための指示を出しているか(今回の話です)
  • DNS:なりすましメールを防ぐ設定(SPF・DMARC)があるか
  • WordPress:本体の版が古くないか、余計な情報やファイルが外から見えていないか

診断のときは、当社のサーバーが、一般の方がホームページを見るときと同じ方法で対象のサイトを開きます。ログインを試したり、攻撃をしかけたりはしません。ご自身が管理しているサイトの点検にお使いください。

当社サイトの結果

セキュリティヘッダーの欄は、次のとおりでした。

項目結果
Strict-Transport-Securityなし
Content-Security-Policyなし
X-Content-Type-Optionsなし
クリックジャッキング対策(X-Frame-Options)なし
Referrer-Policyなし(注意)
Permissions-Policyなし(注意)
ソフトウェア情報の露出なし(問題なし)

最後の1項目だけが合格で、それ以外はどれも設定されていませんでした。

セキュリティヘッダーとは

ホームページを開くと、サーバーは画面の中身と一緒に、ブラウザあての短い指示書を送っています。その中の、安全に関わる指示をセキュリティヘッダーと呼びます。

指示がなくてもページは普通に表示されます。そのため、設定が抜けていても気づきにくいのです。各項目の役割は次のとおりです。

  • Strict-Transport-Security:このサイトは必ず暗号化(https)で開くように、とブラウザに覚えさせます。
  • Content-Security-Policy:ページの中で何を読み込んでよいか、どこに埋め込まれてよいかを決めます。
  • X-Content-Type-Options:ファイルの種類をブラウザが勝手に推測しないようにします。画像のふりをした不正なファイルを、プログラムとして動かされるのを防ぎます。
  • X-Frame-Options:他のサイトが当社のページを枠の中に表示するのを禁止します。本物のページの上に透明なボタンを重ねて、意図しない操作をさせる手口(クリックジャッキング)への対策です。
  • Referrer-Policy:当社サイトから他のサイトへ移るとき、どのページから来たかをどこまで伝えるかを決めます。
  • Permissions-Policy:カメラ、マイク、位置情報など、このサイトでは使わない機能を最初から止めておきます。

調べる途中で見つかったこと

設定の前に当社でも確かめたところ、もう一つ問題が見つかりました。

アドレスを http://fi-no.co.jp/ と打つと、暗号化されていない状態のままページが表示されていたのです。本来は、自動で https:// の側へ切り替わるべきところです。

ふだんは検索結果やブックマークから https:// で開かれるので、気づいていませんでした。ただ、ほかのサイトに http:// で始まる古いリンクが残っていれば、そこから来た方は暗号化されていない通信で当社サイトを見ていたことになります。

行ったこと

1. http で来たアクセスを https へ転送

http:// で来たアクセスは、すべて https:// の同じページへ転送するようにしました。

2. セキュリティヘッダーを6項目すべて設定

なしだった6項目を、すべて送るようにしました。

設定は、WordPressのテーマに書きました。サーバーの設定ファイル(.htaccess)に書く方法もありますが、7月にそこへ書いた転送の設定が、WordPressの操作で上書きされて消えたことがあります(経緯はこちらの記事)。テーマに書いた設定は、その操作では消えません。

3. 読み込み元の制限の程度

Content-Security-Policy は、厳しく設定すると「このサイトとGoogleのこのサーバー以外からは、プログラムを一切読み込まない」といった制限までかけられます。今回はそこまでは絞っていません。

当社サイトでは、アクセス解析(Googleアナリティクス、Microsoft Clarity)を使っています。読み込み元を厳しく絞ると、解析の仕組みを変えたりツールを足したりするたびに許可の設定も直さなければならず、忘れるとサイトの一部が動かなくなります。今回は、他サイトへの埋め込みの禁止、通信の暗号化の徹底、フォームの送り先の限定にとどめました。

4. 公開前の確認

本番に出す前に、確認用の環境で、トップページ、固定ページ、ブログ記事の計9ページを開き、ヘッダーが出ていること、表示や動きにエラーが出ていないことを確かめました。

対策後の結果

本番に反映したあと、同じツールでもう一度調べました。

項目対策前対策後
Strict-Transport-Securityなしあり
Content-Security-Policyなしあり
X-Content-Type-Optionsなしあり
クリックジャッキング対策なしあり
Referrer-Policyなし(注意)あり
Permissions-Policyなし(注意)あり
ソフトウェア情報の露出なし(問題なし)なし(問題なし)

セキュリティヘッダーの欄は7項目すべて合格になりました。WordPressの欄にある「http → https 転送」も「あり」になっています。

反映のあとは、トップページ、サービス、ブログ一覧、お問い合わせなど6ページを本番で開き、エラーが出ていないこと、アクセス解析のデータが送られていることを確かめました。

WordPressの欄には、注意が2つ残っています。WordPressの版が書かれた説明ファイル(readme.html)が外から読めることと、外部から投稿などを操作する古い仕組み(XML-RPC)が有効なことです。どちらも「余裕があるときに直す」区分の項目で、今回はセキュリティヘッダーの対応にとどめました。

診断ツールではわからないこと

外から見てわかるのは、サイトの入り口の様子までです。次の点は、管理画面やサーバーの中を見ないと確かめられません。

  • プラグインやテーマが更新されているか
  • 管理者のパスワードが十分に強いか、二段階の認証を使っているか
  • サーバー内部の設定
  • すでに不正に侵入されていないか

診断の結果がよくても、これらが手つかずであれば安全とはいえません。

ご自身のサイトでもお試しください

Webサイトセキュリティ診断 は、どなたでもお使いいただけます。ご自身や自社のサイトのURLを入れて、結果をご覧ください。

「なし」や「注意」が並んでいても、すぐに危険というわけではありません。ただ、当社のサイトがそうだったように、表示に影響がないので放置されやすい項目です。結果の見方がわからない場合や、設定を任せたい場合は、お問い合わせフォームからご相談ください。