Contents
セキュリティヘッダーとは
悪意のあるスクリプトがあなたのサイトで動くのを防いだり、危険な通信の接続方法を禁止したりすることによって、ユーザーとサイトを守ります
HTTPセキュリティヘッダー主な目的
主要なセキュリティヘッダー
- Content-Security-Policy (CSP)
- ウェブページが読み込める外部リソース(スクリプト、スタイル、画像など)の出所を制限します
- XSS攻撃を効果的に防止する最も強力なセキュリティヘッダーの一つです
CSPを厳しく設定しすぎると、GTMが正常に機能しなくなり、ウェブサイトのアナリティクスやマーケティングツールが動作しなくなる可能性があります。そのため、CSP設定時には必要なドメインと機能を適切に許可する必要があります。
- X-Frame-Options
- ウェブページが他のサイトのフレーム内で表示されることを制限します
- クリックジャッキング攻撃(ユーザーが意図しないボタンやリンクをクリックするよう誘導する攻撃)を防止します
- X-Content-Type-Options
- ブラウザによるMIMEタイプの推測(スニッフィング)を防止します
- ファイルタイプの偽装による攻撃を防ぎます
- Strict-Transport-Security (HSTS)
- ウェブサイトへの接続をHTTPSのみに強制します
- 中間者攻撃やプロトコルダウングレード攻撃を防止します
- X-XSS-Protection
- ブラウザ内蔵のクロスサイトスクリプティング対策を有効化します
- 最新のブラウザではCSPに置き換えられつつありますが、下位互換性のために使用されることがあります
- Referrer-Policy
- ブラウザが他のウェブサイトにリクエストを送る際に、どの程度のリファラー情報を送信するかを制御します
- 機密情報の漏洩を防止します
- Permissions-Policy (旧Feature-Policy)
- ブラウザの特定の機能(カメラ、マイク、位置情報など)の使用を制限します
- ウェブサイトが持つべき権限を明示的に定義します
セキュリティヘッダーの実装方法
セキュリティヘッダーは様々な方法で実装できます:
- ウェブサーバーの設定
- Apache (.htaccessファイルやhttpd.confなど)
- Nginx (nginx.confなど)
- IIS (web.configなど)
- アプリケーションコード内
- PHP、Node.js、Rubyなどのバックエンドコードで設定
セキュリティヘッダーの基本的なPHPでの設定方法
<?php
// セキュリティヘッダーを設定
header("X-Frame-Options: SAMEORIGIN");
header("X-XSS-Protection: 1; mode=block");
header("X-Content-Type-Options: nosniff");
header("Referrer-Policy: strict-origin-when-cross-origin");
header("Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline';");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Pragma: no-cache");
// 以下、通常のPHPコード
?>
- CDN/WAF設定
- Cloudflareなどのサービスを通じて設定
フレームワークを使っている場合
Laravel、Symfony、WordPressなどのフレームワークやCMSを使用している場合は、それぞれ専用の設定方法があります。例えばLaravelでは、ミドルウェアを使って設定することが一般的です。
この設定は必ずHTML出力の前に行う必要があります。それ以外の点では、通常のPHPファイルと同じように扱うことができます。