セキュリティヘッダーとは
セキュリティヘッダーは、ウェブサイトのコンテンツを扱う際のブラウザーの動作を指示するHTTPレスポンスヘッダーです。一般的なウェブ脆弱性への防御を強化し、クロスサイトスクリプティング(XSS)、クリックジャッキング、コンテンツインジェクション、プロトコルのダウングレード攻撃などを防ぎます。適切に設定したセキュリティヘッダーは、多層防御のセキュリティ戦略に不可欠です。必須のセキュリティヘッダー
Strict-Transport-Security(HSTS)
HTTPS接続を強制します。
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- プロトコルのダウングレード攻撃を防ぐ
- 混在コンテンツをブロックする
- SSLストリッピングから守る
Content-Security-Policy(CSP)
リソースの読み込みを制御します。
Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com; style-src 'self' 'unsafe-inline'
- XSS攻撃を防ぐ
- スクリプトの供給元を制御する
- 許可されていないリソースをブロックする
X-Frame-Options(フレーム埋め込み制御)
クリックジャッキングを防ぎます。
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
- サイトをフレームに埋め込めないようにする
- UIレッドレス攻撃から守る
X-Content-Type-Options(コンテンツ種別保護)
MIMEスニッフィングを防ぎます。
X-Content-Type-Options: nosniff
- 宣言されたContent-Typeをブラウザーに尊重させる
- 誤って解釈されたファイルを通じたスクリプトインジェクションを防ぐ
追加のセキュリティヘッダー
| ヘッダー | 目的 | 例 |
|---|---|---|
| X-XSS-Protection | XSSフィルター(レガシー) | 1; mode=block |
| Referrer-Policy | リファラー情報を制御 | strict-origin-when-cross-origin |
| Permissions-Policy | 機能を制限 | geolocation=(), camera=() |
| Cross-Origin-Opener-Policy | プロセスを分離 | same-origin |
| Cross-Origin-Embedder-Policy | リソースを分離 | require-corp |
実装例
Nginx設定
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
Apache設定
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
セキュリティヘッダーとドメインの健全性
ドメインにヘッダーが重要な理由
- ドメインを訪れる利用者を保護する
- ドメインの評判が損なわれるのを防ぐ
- コンプライアンス要件を満たす
- 一般的な攻撃から防御する
セキュリティヘッダーのテスト
実装を確認するツール:
- securityheaders.com
- Mozilla Observatory
- SSL Labs
- Chrome DevTools Networkタブ
ベストプラクティス
1. HSTSから始める: HTTPSの強制に不可欠
2. CSPを段階的に導入する: report-onlyモードから始める
3. 十分にテストする: ヘッダーによって機能が壊れる場合がある
4. プリロードリストを使う: ブラウザーのプリロードリストへ申請する
5. 違反を監視する: CSPのレポートエンドポイントを使う
6. 定期的に監査する: セキュリティ要件は変化する
一般的な評価基準
| 評価 | 一般的な要件 |
|---|---|
| A+ | 重要なヘッダーすべて、HSTSプリロード |
| A | HSTS、CSP、X-Frame-Options、X-Content-Type |
| B | 一部のヘッダーが不足 |
| C/D | 最小限のセキュリティヘッダー |
| F | セキュリティヘッダーなし |
セキュリティヘッダーはウェブアプリケーションセキュリティの重要な層です。サーバー側のセキュリティ対策を補完し、ブラウザーが強制する保護を提供します。