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

こんにちは。飯塚です。
 
システム開発の脆弱性検証として、OWASP ZAP を使うことがあります。検知された各脆弱性の理解のために記事にしました。
 
本記事は、脆弱性の完全な防止を保証するものではありませんので、あらかじめご了承ください。

検証環境(OS・Apache・OWASP ZAP)

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

Missing Anti-clickjacking Header とは(クリックジャッキングの脆弱性)

クリックジャッキング攻撃の対策がされていない、という脆弱性です。ハイジャック(hijacking)は飛行機を乗っ取ることなので、クリックジャッキングはクリック操作を乗っ取るという意味ですね。
 
iframe を使用してサイトを透明化し、重ねることでユーザーが意図しない処理を実行させる手法です。
 
大きく2パターンがあります。
 

攻撃例①:ログイン済みサイトの操作を誘導する

罠サイトにユーザーがログイン中のサイトを透明化し、重ねることで意図しない操作を実行させるパターンです。例えば、SNSサイト上のリンクから罠サイトに遷移したとします。罠サイトのボタンをクリックすると、SNS上で勝手に投稿や公開が行われていた、という攻撃です。
 

攻撃例②:悪意のあるサイトを重ねる

正常なサイトの上に、悪意のあるサイトを透明化して重ねる手法です。通常のサイトをクリックしたつもりが、実は裏でウイルスをダウンロードしていた、という攻撃です。
 
参考
【ZAP】Missing Anti-clickjacking Header
【IPA】安全なウェブサイトの作り方 – 1.9 クリックジャッキング

クリックジャッキングの対策方法

クリックジャッキング攻撃は iframe を透明化することで成立します。iframe の埋め込みを制限することが対策です。
 
具体的には、Content-Security-Policy ヘッダー‘frame-ancestors’ ディレクティブを設定します。
X-Frame-Options ヘッダー を使用する対策は非推奨になったため注意してください。
 
非推奨となった理由は以下のとおりです。RFC7034 の内容を意訳しました。

すべてのブラウザが「X-Frame-Options」を完全に同じ方法で実装しているわけではないため、意図しない結果を招く可能性があります。
 
さらに、「X-」という構文は廃止予定であることが[RFC6648]で示されているため、「X-Frame-Options」ヘッダーフィールドは将来的に「Content Security Policy(CSP)バージョン1.1 [CSP-1-1]」における「Frame-Options」ディレクティブに置き換えられる予定です。

Apache による Content-Security-Policy(CSP) ヘッダー設定例

Apache のフォルダ構成

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

設定例
 
/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';"

まとめ

いかがでしょうか。
 
勉強不足で恥ずかしい限りですが、RFCを初めてまともに読みました。なぜこの対策で脆弱性を防げるのか理解するためにも、仕様を決めている一次情報まで遡ることが必要なのだと実感しました。
 
OWASP ZAPで検知された他の脆弱性についても、今後記事を書いていく予定です。参考になれば幸いです。
 
 
 
 
《関連記事》

Content Security Policy
技術
2025.12.19(Fri)

OWASP ZAPで検知されたContent Security Policy(CSP)とは? Apacheでの設定・対応例

#ツール

Content Security Policy(CSP)
技術
2025.11.25(Tue)

ApacheのServerヘッダーにバージョン情報が漏れる問題と安全な設定方法|OWASP ZAP検出エラーを解消

#ツール

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

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

#ツール

記事をシェア
MOST VIEWED ARTICLES