【脆弱性対策】ApacheでHTTPセキュリティヘッダを設定する方法 OWASP ZAP検出への対応例

こんにちは。飯塚です。
 
システム開発の脆弱性検証として、OWASP ZAP を使うことがあります。検知された脆弱性に対応する機会があったため、対応の一例としてまとめました。
 
対応方法はシステムの要件によっても変わりますし、絶対に脆弱性を防げることを保証するものではない点はご了承ください。

OS、Apache、OWASP ZAPのバージョン

項目 バージョン
OS Debian GNU/Linux 12 (bookworm)
Apache 2.4.XX
OWASP ZAP 2.15.0

Apacheの設定ファイルとフォルダ構成

Apacheの設定ファイルとフォルダ構成は以下のとおりです。

/etc/apache2
    |-- apache2.conf
    |-- /conf-available
        |-- security.conf

Apache設定変更時の注意点

Apache の設定変更後は再起動が必要です。
 
また、ブラウザで反映を確認する際は、次の2点をおすすめします。

  • シークレットブラウザを使用する
  • 反映後、キャッシュのクリアとハード再読み込み

これをしないと反映されないことがありました。

事前準備 Apacheのheadersモジュールを有効化する

ヘッダーモジュールが無効な場合は、有効化します。

sudo a2enmod headers

反映のために再起動します。
sudo systemctl restart apache2

OWASP ZAPで検出された Content Security Policy Header Not Set の対応(Apache)

/conf-available/security.confContent-Security-Policyヘッダー を適切に設定します。以下、設定例です。

Header always set Content-Security-Policy "frame-ancestors 'self'; script-src 'self' 'sha256-***'; style-src 'self' 'sha256-***' https://cdn.jsdelivr.net https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net; form-action 'self' ;img-src 'self'; connect-src 'self'; frame-src 'self'; media-src 'self'; object-src 'self'; manifest-src 'self';"

OWASP ZAPで検出された Missing Anti-clickjacking Header の対応(Apache)

/conf-available/security.confX-Frame-Optionsヘッダー を適切に設定します。以下、設定例です。

Header always set X-Frame-Options "SAMEORIGIN"

ちなみに、X-Frame-Options の代わりに、frame-ancestors ディレクティブを Content-Security-Policy ヘッダーで使用するように MDN に記載があります。利用するブラウザ要件に合わせて設定してください。

OWASP ZAPで検出された ディレクトリブラウジング の対応(Apache)

apache2.confOptions を適切に設定します。以下、設定例です。

Options -Indexes

OWASP ZAPで検出された Server Header のバージョン情報漏洩の対応(Apache)

/conf-available/security.confServerTokens を適切に設定します。以下、設定例です。

ServerTokens Prod

OWASP ZAPで検出された Strict-Transport-Security Header Not Set の対応(Apache)

/conf-available/security.confStrict-Transport-Securityヘッダー を適切に設定します。以下、設定例です。

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains;"

OWASP ZAPで検出された X-Content-Type-Options Header Missing の対応(Apache)

/conf-available/security.confX-Content-Type-Optionsヘッダー を適切に設定します。以下、設定例です。

Header set X-Content-Type-Options: "nosniff"

まとめ

いかがでしょうか。
 
私は対応時にブラウザ側に設定前の値が残ってしまい、確認に時間がかかりました。皆様もご注意ください。今回は対応のまとめ記事ですが、1つ1つの脆弱性の詳細についても書こうと考えています。
 
 
 
 
《関連記事》

ApacheでHSTS(Strict-Transport-Security)を設定
技術
2025.11.7(Fri)

ApacheでHSTS(Strict-Transport-Security)を設定する方法|OWASP ZAP検出エラーを解消

#ツール

X-Frame-OptionsとCSP(frame-ancestors)の設定方法
技術
2026.2.27(Fri)

【Clickjacking対策】X-Frame-OptionsとCSP(frame-ancestors)の設定方法|OWASP ZAP検知対応

#ツール

Content Security Policy(CSP)
技術
2026.3.13(Fri)

OWASP ZAPで検出されるディレクトリブラウジングの原因とApache設定による対策

#ツール

記事をシェア
MOST VIEWED ARTICLES