■HTTP-Headerとはなにか?:ブラウザに振る舞いを定義することの重要性

HTTPセキュリティヘッダーは、ウェブアプリケーションを様々な攻撃から保護するために重要な役割を担っています。適切に設定されたセキュリティヘッダーは、様々な攻撃から保護し、全体的なセキュリティ態勢を強化します。 

 
■HTTPヘッダーとは何か 
HTTPヘッダーは、ウェブブラウザとウェブサーバーが情報をやり取りする際に使う情報です。インターネット上でウェブページを表示するために使われます。ブラウザがサーバーにリクエスト(要求)を送ったり、サーバーがブラウザにレスポンス(返答)を送ったりする際に、その内容をヘッダーに記載します。 

この情報には、手紙の本文(実際のウェブページのデータ)をより理解するための情報が入っています。例えば、ブラウザがどんな種類なのか(「Chrome」や「Firefox」など)、サーバーがどのようにページを返すべきか(エンコーディング方式や圧縮方法など)、レスポンスが成功したか失敗したかの状態を示す「ステータスコード」などが書かれています。 

具体的には、以下のような情報が含まれます。 
 

  1. Content-Type(コンテンツタイプ): ページの内容が何か(例: HTML、画像、動画など) 
  1. User-Agent(ユーザーエージェント): リクエストを送ったブラウザやデバイスの種類 
  1. Authorization(認証): セキュリティのためにユーザーがログインしているかどうか 
  1. Cookie(クッキー): ブラウザが覚えている情報、例えばログイン状態や設定内容 

 
つまり、HTTPヘッダーは、サーバーとブラウザが正しくやり取りをするために必要な「追加の情報」をまとめている部分となります。イージスEWでは、この情報を元に診断をしています。 

■XSSとはなにか 
クロスサイトスクリプティング(XSS)とは、サーバーに埋め込まれた悪意あるコードが、そのページを閲覧した不特定多数のユーザーによって実行されてしまう脆弱性を指します。 

実際の攻撃では、攻撃者が悪意あるコードを埋め込んだサイトをユーザーに閲覧させたあとに、別のWebサイトに誘導して攻撃を行うことから、「クロスサイト(Webサイトをまたがせて)スクリプティング(スクリプトを実行させる)」と呼ばれています。 

■主要なHTTPセキュリティヘッダー:詳細説明と実装について(Apacheの場合) 

1.Content-Security-Policy (CSP) 

・機能説明 

Content-Security-Policyは、クロスサイトスクリプティング(XSS)やその他のコンテンツインジェクション攻撃を防ぐためのセキュリティレイヤーです。 

・なぜ必要なのか 

CSPは、ウェブページが読み込むことができるリソース(スクリプト、スタイルシート、画像など)の種類とソースドメインを制限します。これにより、悪意のあるスクリプトの実行を防ぎ、サイトのセキュリティを大幅に向上させます。 

・Apache httpd.confでの実装 
 

■ ApacheでのCSP設定例 

 
<IfModule mod_headers.c> 

    Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self';" 

</IfModule> 

 
■ 各ディレクティブの説明 
 

ディレクティブ 内容 
default-src 'self' デフォルトでは自ドメインからのリソースのみを許可。 
script-src 'self' JavaScriptは自ドメインからのみ読み込みを許可。 
style-src 'self' CSSも同様に自ドメインからのみ許可。 
img-src 'self' 画像も自ドメインからのみ読み込み。 
object-src 'none' FlashやJavaアプレットなどの埋め込み型オブジェクトは全て拒否。 
frame-ancestors 'none' このページが他のサイトのiframeなどで読み込まれるのを防止(クリックジャッキング対策)。 
base-uri 'self' <base>タグによるベースURLの設定を自ドメインのみに制限。 

■ 補足と注意点 
 
補足: 

mod_headers モジュールが有効である必要があります。 
有効化をするには、下記コマンドの投入が必要です(Debian系の場合): 
a2enmod headers、 

systemctl restart apache2 
 
注意点: 

Content-Security-Policyは適用範囲が非常に広く、既存のサイトにそのまま適用するとJavaScriptやCSSの読み込みがブロックされる可能性があります。CSPの導入前には必ず検証環境でテストしてください。 

外部リソース(CDNなど)を利用している場合は、script-srcやstyle-srcに対象ドメインを明示的に追加する必要があります。 

 
例:apache 

 
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.example.com; style-src 'self' https://fonts.googleapis.com;" 

 
・レポートモードでの導入(本番前に影響確認)には以下のように設定:apacheの例 
 

Header set Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-violation-report-endpoint/" 

2.Redirection (HTTP/301 Moved Permanently) 

・機能説明 

HTTP 301リダイレクトは、ウェブページが永続的に移動したことをクライアントに通知するためのHTTPステータスコードです。 

・なぜ必要なのか 

HTTPからHTTPSへのリダイレクトは、すべての通信を暗号化された安全な接続に強制するために使用されます。これにより、中間者攻撃やデータの傍受を防ぎます。 

・Apache httpd.confでの実装 

<VirtualHost *:80> 

    ServerName www.example.com 

    Redirect permanent / https://www.example.com/ 

</VirtualHost> 

 3.Strict-Transport-Security (HSTS) 

・機能説明 

HTTP Strict Transport Security (HSTS) は、ウェブサイトが HTTPS 経由でのみアクセスされることを強制するセキュリティヘッダーです。 

・なぜ必要なのか 

HSTS は、SSL/TLS プロトコルのダウングレード攻撃や中間者攻撃を防ぎます。一度設定されると、ブラウザは指定された期間中、そのドメインへのすべての接続を HTTPS で行います。 

・Apache httpd.confでの実装 

<IfModule mod_headers.c> 

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

</IfModule> 

4. X-Content-Type-Options 

・機能説明 

X-Content-Type-Options は、ブラウザによる MIME タイプのスニッフィング(推測)を防ぐセキュリティヘッダーです。 

・なぜ必要なのか 

このヘッダーは、ブラウザが提供された Content-Type を無視してコンテンツタイプを推測することを防ぎます。これにより、MIME タイプのミスマッチを悪用した攻撃(例:悪意のあるスクリプトを画像ファイルとして偽装する)を防ぐことができます。 

・Apache httpd.confでの実装 

<IfModule mod_headers.c> 

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

</IfModule> 

 5. X-Frame-Options 

・機能説明 

X-Frame-Options は、ウェブページが iframe 内で表示されることを制御するセキュリティヘッダーです。 

・なぜ必要なのか 

このヘッダーは、クリックジャッキング攻撃を防ぐために使用されます。クリックジャッキングは、ユーザーを騙して悪意のあるアクションを実行させる攻撃手法です。 

・Apache httpd.confでの実装 

<IfModule mod_headers.c> 

    Header set X-Frame-Options "SAMEORIGIN" 

</IfModule> 

 6. X-XSS-Protection 

・機能説明 

X-XSS-Protection は、ブラウザの組み込み XSS 防御機能を制御するセキュリティヘッダーです。 

・なぜ必要なのか 

このヘッダーは、クロスサイトスクリプティング(XSS)攻撃を検出し、ページの読み込みを停止することで、ユーザーを保護します。 

・Apache httpd.confでの実装 

<IfModule mod_headers.c> 

    Header set X-XSS-Protection "1; mode=block" 

</IfModule> 

 7. Subresource Integrity (SRI) 

・機能説明 

Subresource Integrity は、外部リソース(主にスクリプトやスタイルシート)の整合性を検証する機能です。 

・なぜ必要なのか 

SRI は、CDN や他の外部ソースから読み込まれるリソースが改ざんされていないことを保証します。これにより、悪意のあるスクリプトの注入を防ぎます。 

・HTML内での実装 

SRI は主に HTML 内で実装されるため、Apache の設定ファイルでは直接設定しません。 

代わりに、HTML 内で以下のように使用します: 

<script src="https://example.com/script.js"  

        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" 

        crossorigin="anonymous"></script> 

 8. Cookies 

・機能説明 

Cookies はウェブサイトがユーザーのブラウザに保存する小さなデータファイルです。 

・なぜ必要なのか 

セキュアな Cookie 設定は、セッション管理やユーザー認証の安全性を高めます。特に HttpOnly と Secure フラグは、XSS 攻撃や中間者攻撃からの保護に重要です。 

・Apache httpd.confでの実装 

Apache では、主にアプリケーションレベルで Cookie を設定しますが、以下のようにグローバルな Cookie フラグを設定できます: 

<IfModule mod_headers.c> 

    Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure 

</IfModule> 

 9. Cross-Origin Resource Sharing (CORS) 

・機能説明 

CORS は、ウェブページが異なるドメインのリソースにアクセスすることを制御するメカニズムです。 

・なぜ必要なのか 

CORS は、クロスオリジンリクエストに関連するセキュリティリスクを軽減しながら、必要な場合に異なるドメイン間でのリソース共有を可能にします。 

・Apache httpd.confでの実装 

<IfModule mod_headers.c> 

    Header set Access-Control-Allow-Origin "https://trusted-domain.com" 

    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" 

    Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept" 

</IfModule> 
結論 

HTTP-Headerは、ウェブアプリケーションセキュリティにおいて重要な役割を果たします。 

これらのセキュリティヘッダーを適切に実装することで、ウェブアプリケーションのセキュリティを大幅に向上させることができます。ただし、各ヘッダーの設定はアプリケーションの要件に応じて調整する必要があります。また、これらのヘッダーは包括的なセキュリティ戦略の一部として使用し、定期的に更新と見直しを行うことが重要です。