GitHub Pagesのセキュリティヘッダー警告、無視していいの?
このブログはZola+GitHub Pagesで実現していますが、 GitHub Pagesはセキュリティヘッダの設定ができません。 いないとは思いますが、セキュリティスキャナーなどで未設定を見つけて文句をつけてくるセキュリティ厨がいないとも限りません。 対応すべきか放置すべきかの判断基準を解説しておきます。 セキュリティスキャナーでよく指摘される6つのHTTPレスポンスヘッダーがあります。 これらのヘッダーは、Webサーバーがレスポンスに含めることで、 ブラウザにセキュリティ関連の指示を与えます。 GitHub Pagesは静的サイトホスティングサービスですが、 HTTPレスポンスヘッダーをカスタマイズする機能がありません。 どうしてもセキュリティヘッダーを設定したい場合は、Cloudflare CDNを前段に置けばTransform Rulesでヘッダーを追加できます。 ただし、Cloudflareの無料プランはネームサーバー移管が必須です。 既存のDNSサービスを使い続けたい場合、 この方法は採用しづらいです。 セキュリティヘッダーの重要度は、サイトの種類によって大きく異なります。 GitHub Pagesでも動的なSPAをホストできますが、 ここではZolaやHugoなどのSSGで生成した純粋な静的サイトを想定しています。 WordPressでセキュリティヘッダーが未設定の場合、 管理者がログイン中にクリックジャッキング攻撃を受けたり、 XSS経由でマルウェアを注入されたりするリスクがあります。 以下のフローチャートで判断できます。 フォームがあるサイトは対応が必要です。 問い合わせフォーム、会員登録、ログイン機能、寄付やEC機能があれば、 ユーザー入力を受け付けるためXSSのリスクがあります。 フォームがない場合はサイトの性質で判断します。 個人の技術ブログやポートフォリオなら放置で問題ありません。 公的機関などのサイトは、信頼性の観点から対応が望ましいです。 セキュリティスキャナーの警告を見ると焦りますが、 すべての警告に対応する必要はありません。 重要なのはリスク評価です。 GitHub Pagesで静的ブログを公開している場合、 セキュリティヘッダーがなくても攻撃面がほとんどありません。 「設定できないから放置」は、この場合は合理的な判断です。 一方、WordPressや動的サイトでは事情が異なります。 スキャナーの警告は「ベストプラクティスに従っていない」という指摘であり、 「今すぐ危険」という意味ではありません。 コンテキストに応じた判断をしましょう。 本記事は情報提供を目的としており、 個別の状況に応じた判断は読者ご自身の責任でお願いします。 セキュリティ要件は組織やサービスによって異なるため、 必要に応じて専門家にご相談ください。TL;DR
セキュリティヘッダーとは何か
ヘッダー 目的 設定しないリスク Strict-Transport-Security (HSTS) HTTPS接続を強制 HTTPへのダウングレード攻撃 Content-Security-Policy (CSP) XSS攻撃を防止 悪意あるスクリプト実行 X-Frame-Options クリックジャッキング防止 偽サイトへの埋め込み X-Content-Type-Options MIMEスニッフィング防止 ファイル種別の誤認識 Referrer-Policy リファラー情報の制御 URLパラメータの漏洩 Permissions-Policy ブラウザ機能の制御 カメラ等の不正利用 GitHub Pagesの制限
.htaccess は使えない(Apache設定ファイル)nginx.conf も使えない(Nginx設定ファイル)静的サイトと動的サイトでリスクが違う
観点 静的サイト(SSG生成) 動的サイト(WordPress等) ユーザー入力 受け付けない フォーム等で受け付ける サーバーサイド処理 なし PHP + DB 管理画面 なし /wp-admin 等が存在XSSリスク ほぼなし 高い クリックジャッキング 影響軽微 管理画面が標的になる 判断基準:いつ対応すべきか
flowchart LR
A[フォームがある?] -->|Yes| B[対応すべき]
A -->|No| C[サイトの性質は?]
C -->|個人ブログ| D[放置OK]
C -->|企業サイト| E[できれば対応]
C -->|公的機関| F[対応すべき]
まとめ
.htaccess やプラグインで設定できるので、対応しておくべきです。参考文献