セキュリティヘッダーとは
セキュリティヘッダーは、ウェブサイトのコンテンツを処理する際にブラウザがどのように動作するかを指示するHTTPレスポンスヘッダーで、クロスサイトスクリプティング(XSS)、クリックジャッキング、コンテンツインジェクション、プロトコルダウングレード攻撃などの一般的なウェブの脆弱性に対する保護を強化します。適切に設定されたセキュリティヘッダーは、多層防御セキュリティ戦略に不可欠です。必須セキュリティヘッダー
厳密なトランスポートセキュリティ(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 tab
ベストプラクティス
1. HSTSから始める: HTTPS強制に不可欠
2. 段階的にCSPを実装: レポートのみモードで開始
3. 十分にテストする: ヘッダーは機能を破損する可能性があります
4. プリロードリストを使用: ブラウザプリロードリストに送信
5. 違反を監視: CSP報告エンドポイントを使用
6. 定期的に監査: セキュリティ要件は進化します
一般的な等級基準
| 等級 | 一般的な要件 |
|---|---|
| A+ | すべての重要なヘッダー、HSTSプリロード |
| A | HSTS、CSP、X-Frame-Options、X-Content-Type |
| B | いくつかのヘッダーが欠落 |
| C/D | 最小限のセキュリティヘッダー |
| F | セキュリティヘッダーなし |
セキュリティヘッダーはウェブアプリケーションセキュリティの重要な層を表し、サーバー側のセキュリティ対策を補完するブラウザで強制された保護を提供します。