アパッチの.htaccessファイルを用いたセキュリティヘッダー設定による脆弱性対策手法

Apache .htaccessを使用した以下のヘッダーセキュリティ脆弱性に対する解決方法:
X-Frame-Options, Strict-Transport-Security, X-XSS-Protection, X-Content-Type-Options, Content-Security-Policy, Referrer-Policy, Feature-Policy
セキュリティスキャンツールによる診断後、以下のような報告がされる場合があります:X-XSS-ProtectionやX-Frame-Optionsなどの防护対策が適切に実施されていない、など。
解決方法:
まず、httpd.conf 内で以下の設定が有効になっていることを確認してください:
LoadModule headers_module modules/mod_headers.so
**httpd.confに「LoadModule headers_module modules/mod_headers.so」の設定が存在することは、以下のことを意味します:
- Apacheの「ヘッダー制御機能」が有効になっている状態です
- 設定ファイル内(<VirtualHost>セクションや.htaccessファイル内)でHeader指令が使用可能になります
この行がコメントアウトされていないことを確認します。そうでない場合、以下のコードは機能しません。通常、このモジュールはデフォルトで有効になっています。
サイトのルートディレクトリにある.htaccessファイルの末尾に以下を追加してください:
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000;includeSubDomains"
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
Header set X-Frame-Options SAMEORIGIN
Header set Content-Security-Policy "connect-src 'self'"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "microphone=(),camera=()"
</IfModule>
はい、これらはApacheの.htaccessファイルで使用するセキュリティヘッダー設定です。日本語で分かりやすく説明しますね。<IfModule mod_headers.c> Header set Strict-Transport-Security “max-age=31536000;includeSubDomains” **意味:** HTTPS接続を強制する設定(1年間有効、サブドメインも適用) →「このサイトは1年間、すべてのページを安全な接続でアクセスするように強制します」
Header set X-XSS-Protection “1; mode=block”
意味: ブラウザのXSS対策機能を有効化(攻撃を検出したらページ表示をブロック)
→「クロスサイトスクリプティング攻撃を検出した場合、ページを完全にブロックします」
Header set X-Content-Type-Options nosniff
意味: ファイル形式の自動判別を無効化(MIMEタイプの偽装を防止)
→「ファイルの種類をブラウザが自動判断しないようにし、偽装攻撃を防ぎます」
Header set X-Frame-Options SAMEORIGIN
意味: クリックジャッキング対策(同一ドメイン内でのみフレーム表示を許可)
→「このサイトは同じドメインのページの中でのみフレーム表示を許可します」
Header set Content-Security-Policy “connect-src ‘self'”
意味: 通信先の制限(自分自身のドメインのみと通信可能)
→「このサイトは自分自身のドメインとのみ通信を行います」
Header set Referrer-Policy “strict-origin-when-cross-origin”
意味: リファラー情報の送信制限(安全な場合のみ送信元情報を送信)
→「他のサイトに移動する時は、安全な接続の場合のみ元のサイト情報を送ります」
Header set Permissions-Policy “microphone=(),camera=()”
意味: 端末機能の使用制限(マイクとカメラの使用を完全禁止)
→「このサイトではマイクとカメラの使用を一切許可しません」
</IfModule>
補足:
これらの設定は、mod_headersモジュールが有効な場合のみ機能します。セキュリティ強化のため、現代的なブラウザの保護機能を活用する重要な設定です。
設定後にStrict-Transport-Securityが有効にならない場合、env=HTTPS
の記述を削除してみてください。
注意点:
外部リソースやファイルを読み込んでいる場合、上記の設定では外部ファイルの読み込みがブロックされる可能性があります。ブラウザの開発者ツール(コンソール)に表示されるエラーメッセージを確認し、以下の対応を実施してください:
X-Frame-Optionsの例外設定について
例:https://media.1pxeye.com/
を許可する場合
Header append X-Frame-Options "ALLOW-FROM https://media.1pxeye.com/"
Content-Security-Policyの例外設定について
例:*.typekit.net
および *.google.com
を許可する場合
Header set Content-Security-Policy "connect-src 'self' *.typekit.net *.google.com"
…has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on…
例:*.
https://*.typekit.netを許可する場合
Header set Access-Control-Allow-Origin "https://*.typekit.net"
検証方法:
https://securityheaders.com/ ウェブサイトで診断を行います。設定が成功した場合、当サイト《十分钟课堂》を例にとると、以下のような結果が得られます:

設定後にウェブサイトで500エラーが発生した場合、設定行を一つずつ分析し、現在のApacheバージョンに対応していない記述がないか確認する必要があります。詳細な値と関連する説明については、以下をご参照ください:https://developer.mozilla.org/en-US/