モジュール一覧
診断モジュール 01

セキュリティヘッダー診断

HTTPレスポンスヘッダーは、Webアプリケーションの最前線の防御です。 CSP、HSTS、X-Frame-Optionsなど7つの主要ヘッダーの設定状況を検査し、 ブラウザレベルでの攻撃防止が適切に機能しているかを診断します。

チェック項目

7つのセキュリティヘッダーを診断

各ヘッダーの存在、値の妥当性、推奨設定との差異を検査します。

01

Content-Security-Policy (CSP)

XSSやデータインジェクション攻撃を防止するために、ブラウザがロードできるリソースの出所を制限するヘッダー。

推奨設定

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-abc123'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self' https://api.example.com; frame-ancestors 'none';

よくある誤設定

default-src 'self' 'unsafe-inline' 'unsafe-eval' のように unsafe を多用すると、CSPの効果が大幅に低下します。

02

Strict-Transport-Security (HSTS)

ブラウザに対してHTTPS通信のみを使用するよう指示。HTTP接続を自動的にHTTPSにアップグレードし、SSL Stripping攻撃を防止。

推奨設定

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

よくある誤設定

max-age が短すぎる(例: 86400秒 = 1日)場合、攻撃者がダウングレード攻撃を行う時間的余地を残します。

03

X-Content-Type-Options

ブラウザのMIMEタイプスニッフィングを防止。サーバーが指定したContent-Typeを厳密に従わせることで、悪意のあるコンテンツの実行を阻止。

推奨設定

X-Content-Type-Options: nosniff

よくある誤設定

このヘッダーが欠落していると、攻撃者がテキストファイルをJavaScriptとして実行させるMIME Confusion攻撃が可能になります。

04

X-Frame-Options

ページがiframe内に埋め込まれることを制御し、クリックジャッキング攻撃を防止。

推奨設定

X-Frame-Options: DENY

よくある誤設定

ALLOW-FROM を使用している場合、一部のブラウザでサポートされておらず、frame-ancestors CSPディレクティブの併用が推奨されます。

05

X-XSS-Protection

ブラウザ組み込みのXSSフィルターを有効化。モダンブラウザではCSPが推奨されるが、レガシーブラウザ向けの追加防御層として有効。

推奨設定

X-XSS-Protection: 1; mode=block

よくある誤設定

X-XSS-Protection: 0 と設定するとフィルターが無効になります。CSPが未設定の場合、XSS攻撃への耐性が著しく低下します。

06

Referrer-Policy

他サイトへのリンクをクリックした際に送信されるリファラー情報を制御。URLに含まれるトークンやセッション情報の漏洩を防止。

推奨設定

Referrer-Policy: strict-origin-when-cross-origin

よくある誤設定

Referrer-Policy: unsafe-url は完全なURLを常に送信するため、クエリパラメータに含まれる機密情報が外部サイトに漏洩します。

07

Permissions-Policy

ブラウザAPIへのアクセスを制御。カメラ、マイク、位置情報などの機能を必要に応じて制限し、不正利用を防止。

推奨設定

Permissions-Policy: camera=(), microphone=(), geolocation=(self), payment=(self)

よくある誤設定

ヘッダーが未設定の場合、埋め込まれたサードパーティのiframeがカメラやマイクにアクセスを試みることが可能になります。

脆弱性の背景

なぜセキュリティヘッダーが重要なのか

HTTPセキュリティヘッダーは、サーバーからブラウザに対してセキュリティポリシーを伝える仕組みです。 これらのヘッダーが適切に設定されていないと、以下のリスクが発生します。

ヘッダー未設定のリスク

  • XSS攻撃によるユーザーセッションの窃取
  • クリックジャッキングによるフォーム送信の操作
  • MIMEスニッフィングによる悪意のあるコンテンツ実行
  • HTTPS通信のダウングレード攻撃
  • リファラー経由での機密URLの漏洩

適切な設定のメリット

  • ブラウザレベルでのXSS攻撃の自動ブロック
  • iframe埋め込みによる詐欺行為の防止
  • 常にHTTPS通信が保証される安全な接続
  • ブラウザ機能の不正利用防止
  • セキュリティ監査・コンプライアンスの要件充足

実際の被害事例

ヘッダー未設定による攻撃事例

British Airways データ漏洩事件(2018年)

CSPの未設定により、攻撃者がWebサイトにスキミングスクリプトを注入。約38万件のクレジットカード情報が盗まれ、GDPRに基づく約250億円の罰金が科されました。CSPが適切に設定されていれば、外部スクリプトの読み込みをブロックできた可能性があります。

クリックジャッキングによるSNSアカウント乗っ取り

X-Frame-Optionsが未設定のログインページをiframe内に埋め込み、透明なオーバーレイで偽のボタンを配置。ユーザーは通常のページをクリックしているつもりで、実際にはログイン情報を攻撃者のサーバーに送信していました。

HTTPS Stripping Attack

HSTSが設定されていないサイトに対して、公共Wi-Fiで中間者攻撃を実行。HTTPSからHTTPへダウングレードさせ、通信内容を平文で傍受。ログイン情報やセッショントークンが盗まれました。

検出メカニズム

Security Scannerの検出方法

01

HTTPリクエストの送信

対象URLに対してHEADリクエストおよびGETリクエストを送信し、レスポンスヘッダーを取得します。

02

ヘッダーの存在チェック

7つの主要セキュリティヘッダーの有無を確認。欠落しているヘッダーを検出します。

03

値の妥当性検証

各ヘッダーの値が推奨設定に準拠しているかを検証。unsafe-inlineやunsafe-evalの使用、不適切なmax-age値などを検出します。

04

スコアリング

ヘッダーごとに重要度に応じた重み付けスコアを算出。CSPとHSTSは高い重みが割り当てられます。

05

改善提案の生成

検出された問題ごとに、具体的な修正コードと推奨設定を提示します。

修正方法

セキュリティヘッダーの設定方法

Next.js(next.config.js)

// next.config.js
const securityHeaders = [
  { key: 'Content-Security-Policy', value: "default-src 'self'; script-src 'self'" },
  { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' },
  { key: 'X-Content-Type-Options', value: 'nosniff' },
  { key: 'X-Frame-Options', value: 'DENY' },
  { key: 'X-XSS-Protection', value: '1; mode=block' },
  { key: 'Referrer-Policy', value: 'strict-origin-when-cross-origin' },
  { key: 'Permissions-Policy', value: 'camera=(), microphone=(), geolocation=()' },
];

module.exports = {
  async headers() {
    return [{ source: '/(.*)', headers: securityHeaders }];
  },
};

Nginx

# /etc/nginx/conf.d/security-headers.conf
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Apache(.htaccess)

# .htaccess
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"

セキュリティヘッダーを今すぐ診断

あなたのWebアプリのHTTPセキュリティヘッダー設定を自動チェック。 不足しているヘッダーや誤設定を検出し、具体的な修正方法を提示します。