セキュリティヘッダ
HTTP レスポンスヘッダでブラウザの挙動を制御し、XSS やクリックジャッキングなどへの防御を一段上乗せする仕組みです。
- 1.セキュリティヘッダは、サーバが返す HTTP ヘッダでブラウザに「安全側の挙動」を指示し、攻撃の被害を抑える防御層です。
- 2.代表例は CSP(スクリプト実行元の制限)、HSTS(HTTPS 強制)、X-Frame-Options(フレーム埋め込み防止)など。
- 3.あくまで多層防御の一段。脆弱性そのものを直す代わりにはならず、入力検証や出力エスケープと併用してこそ効果が出ます。
セキュリティヘッダとは何か
セキュリティヘッダとは、Web サーバが返す HTTP レスポンスヘッダのうち、ブラウザに「より安全な挙動」を指示するためのものです。HTML を1行も変えずに、サーバの設定だけで防御を一段足せるのが特徴です。
仕組みの肝は、防御の実行役がブラウザ側である点です。サーバはヘッダで「スクリプトはこの出所からだけ実行してよい」「このサイトは必ず HTTPS で開け」といったポリシーを宣言し、ブラウザがそれを解釈して強制します。
HTTP/1.1 200 OK
Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=63072000
X-Content-Type-Options: nosniff
ヘッダはあくまで被害を抑える保険であり、脆弱性そのものを塞ぐものではありません。とはいえ設定コストが低く効果が見込めるため、まず入れておくべき土台として広く推奨されています。
主要なヘッダ一覧
代表的なセキュリティヘッダと、その役割を一覧します。それぞれ防ぐ攻撃が異なります。
| ヘッダ | 役割 | 主に防ぐもの |
|---|---|---|
Content-Security-Policy | スクリプト等の読み込み元を制限 | XSS、データ流出 |
Strict-Transport-Security | 以後の接続を HTTPS に強制 | 中間者攻撃、HTTPS 剥がし |
X-Frame-Options | 他サイトでのフレーム埋め込みを禁止 | クリックジャッキング |
X-Content-Type-Options | MIME タイプの推測を無効化 | コンテンツ誤実行 |
Referrer-Policy | 送信する Referer 情報を制限 | URL 経由の情報漏れ |
以下、特に重要な4つを掘り下げます。
CSP:実行できるリソースを縛る
**CSP(Content Security Policy)**は、最も強力かつ設定が難しいヘッダです。「どの出所から読み込んだスクリプト・スタイル・画像などを実行・表示してよいか」をブラウザに指示します。
最大の狙いは XSS の被害軽減です。たとえインジェクションを許しても、インライン <script> や外部の不審なスクリプトの実行をブラウザがブロックするため、注入されたコードが動きません。
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'
上の例は「リソースは原則自サイトからのみ、object(プラグイン)は一切禁止」を意味します。ただし CSP は既存サイトに後付けすると正規の動作まで止めがちで、調整に手間がかかります。まず違反を報告だけする(block せず観測する)モードで運用し、影響を見極めてから強制に切り替えるのが定石です。
CSP はあくまで「注入されたスクリプトの実行を抑える保険」であり、XSS 脆弱性そのものは残ります。出力エスケープを怠ったまま CSP だけに頼ると、設定の穴(許可した CDN の悪用など)から突破され得ます。本丸は出力時のエスケープで、CSP はその上に重ねる層だと位置づけてください。
HSTS:HTTPS を強制する
**HSTS(HTTP Strict Transport Security)**は、Strict-Transport-Security ヘッダで「このサイトには今後、必ず HTTPS で接続せよ」とブラウザに記憶させます。
これが守るのは、最初の http:// アクセスが攻撃者に書き換えられる**「HTTPS 剥がし(SSL stripping)」です。HSTS を受け取ったブラウザは、以後 http:// でアクセスしようとしても自動的に HTTPS へ切り替える**ため、平文通信が発生する隙を消せます。
Strict-Transport-Security: max-age=63072000; includeSubDomains
max-age は記憶する秒数です。includeSubDomains を付けるとサブドメインにも適用されます。前提としてTLSが正しく設定されている必要があります。
HSTS はいったんブラウザに記憶されると、有効期間中は HTTPS を強制し続けます。includeSubDomains や preload(ブラウザ同梱リストへの登録)を有効にすると、HTTPS で配信できないサブドメインがアクセス不能になる事故が起きます。全サブドメインの HTTPS 対応を確認してから、短い max-age で段階的に広げるのが安全です。
フレーム制御と MIME スニッフ対策
X-Frame-Options は、自サイトを他サイトの iframe 内に埋め込ませないためのヘッダです。これが無いと、攻撃者が自サイトを透明な枠で重ね、ユーザーの意図しないクリックを誘うクリックジャッキングが可能になります。DENY(一切禁止)または SAMEORIGIN(同一サイトのみ許可)を指定します。なお、より柔軟に制御できる CSP の frame-ancestors ディレクティブが後継として推奨されており、両方を併記する構成もよく使われます。
X-Content-Type-Options: nosniff は、ブラウザによるMIME タイプの推測(スニッフィング)を無効化します。これを付けないと、ブラウザがファイルの中身を見て勝手に種類を判断し、たとえばテキストとして返したファイルをスクリプトとして実行してしまう余地が生まれます。nosniff はサーバが宣言した Content-Type を尊重させ、この種の誤実行を防ぎます。値は1つだけで効果が出るため、最も手軽に入れられるヘッダの一つです。
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
まとめ
セキュリティヘッダは、サーバ設定だけでブラウザに安全側の挙動を強制し、攻撃の被害を一段抑える多層防御の手段です。CSP(スクリプト実行元の制限)、HSTS(HTTPS 強制)、X-Frame-Options(フレーム埋め込み防止)、X-Content-Type-Options(MIME スニッフ無効化)が中心になります。
重要なのは、これらが脆弱性そのものを直す代替にはならないという位置づけです。CSP はXSS対策の保険、HSTS はTLSを前提とした強制策にすぎません。入力検証や出力エスケープといった本丸の対策と組み合わせ、攻撃面の全体像はOWASP Top 10で押さえたうえで、土台として導入するのが効果的です。
セキュリティ Article
セキュリティヘッダを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティヘッダ
比較で見る軸
難易度: intermediate / カテゴリ: セキュリティ / タグ数: 4
導入後に効く点
代表例は CSP(スクリプト実行元の制限)、HSTS(HTTPS 強制)、X-Frame-Options(フレーム埋め込み防止)など。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- セキュリティ
- タグ数
- 4
判断チェックリスト
- 自社の用途が「セキュリティヘッダ / CSP」に近いか確認する。
- 強みである「セキュリティヘッダは、サーバが返す HTTP ヘッダでブラウザに「安全側の挙動」を指示し、攻撃の被害を抑える防御層です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。