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

アパッチの.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」の設定が存在することは、以下のことを意味します:

  1. Apacheの「ヘッダー制御機能」が有効になっている状態です
  2. 設定ファイル内(<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/

関連記事
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
「一括管理って響き最高!」だけど…WordPressでメルマガ配信するならセキュリティにご用心!メリットと落とし穴、そしてBenchmark Emailの使い方まで、編集長がゆるっと解説!
WASABI
WASABI
2ヶ月前
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
【2025年最新版】WordPress制作者が実務で愛用するおすすめプラグイン10選【フォーム・SNS・セキュリティ・カスタマイズ】
目次 1. お問い合わせフォーム系プラグイン Contact Form 7 2. 柔軟なカスタムフィールドを追加できる定番プラグイン Advanced Custom Fields(ACF) 3. SNS連携・インスタ埋め込みプラグイン Sm […]
メモ・ノートスケ
メモ・ノートスケ
2ヶ月前
【2025年最新版】WordPress制作者が実務で愛用するおすすめプラグイン10選【フォーム・SNS・セキュリティ・カスタマイズ】
WordPress 投稿・固定ページのIDをSQLで変更する方法
WordPressでは、投稿や固定ページ、カスタム投稿タイプの各コンテンツに一意のID(投稿ID)が割り当てられており、 このIDは内部データベース(主に wp_posts テーブル)で管理されています。 通常、投稿IDは自動採番され変更不可ですが、サイト移行やリンク調整などの理由で投稿IDを直接変更したい場合があります。 本記事では、SQLを用いて投稿・固定ページのIDを安全に変更する手順を解説します。 また、ID変更に伴う関連データの更新方法や注意点も詳述しますので、ぜひ参考にしてください。
Hugh
Hugh
1ヶ月前
WordPress 投稿・固定ページのIDをSQLで変更する方法
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
ブラウザのキャッシュによる古いJavaScript、CSS、画像の表示を防ぐには、URLにバージョン番号や日時パラメータを付けてリソースを更新する方法が有効です。 毎回タイムスタンプを使うとキャッシュ効果がなくなるため、手動や適切なタイミングでバージョン番号を管理するのがおすすめです。
Details
Details
3ヶ月前
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
【WordPress対応】郵便番号から住所を自動入力!「Zipaddr-JP」プラグインの導入方法と使い方
目次 プラグイン「Zipaddr-JP」とは 「Zipaddr-JP」の特徴 プラグイン「Zipaddr-JP」の使い方 プラグイン「Zipaddr-JP」のインストール お問い合わせフォームとの連携 さいごに プラグイン「Zipaddr- […]
メモ・ノートスケ
メモ・ノートスケ
3ヶ月前
【WordPress対応】郵便番号から住所を自動入力!「Zipaddr-JP」プラグインの導入方法と使い方
PHPで日本語の日付形式をタイムスタンプに変換する方法【午前/午後対応】
日本語の「2025年6月24日」や「2025年6月24日 午後3時30分」といった形式の日付を、PHPで正確にタイムスタンプへ変換する方法を解説。DateTimeクラスを使ったベストプラクティスや、午前・午後を含む特殊な形式の処理例も紹介します。日本向けWordPress開発にも最適。
キウイフルーツ
キウイフルーツ
3ヶ月前
PHPで日本語の日付形式をタイムスタンプに変換する方法【午前/午後対応】
【WordPress】Openverseを完全に無効化・削除する方法|functions.phpと.htaccessで徹底対応
WordPressに標準搭載されているOpenverse(オープンソース画像検索)を完全に削除したい方へ。functions.phpでの無効化から、.htaccessによるAPI接続のブロックまで、技術者向けに詳しく解説します。
キウイフルーツ
キウイフルーツ
3ヶ月前
【WordPress】Openverseを完全に無効化・削除する方法|functions.phpと.htaccessで徹底対応