HTTP header
headerについてまとめる
リクエストヘッダーとレスポンスヘッダーがある
HTTPヘッダーのカテゴリ
HTTPヘッダーは用途ごとにいくつかのカテゴリに分類できます。以下に代表的なカテゴリとその例を示します。
🔐 セキュリティ関連
セキュリティを強化するために使用されるヘッダー。
Content-Security-Policy: XSSやデータインジェクションを防ぐStrict-Transport-Security: HTTPS通信を強制X-Frame-Options: クリックジャッキング対策X-Content-Type-Options: MIMEタイプスニッフィング防止Referrer-Policy: リファラー情報の制御
🌐 通信制御関連
クライアントとサーバ間の通信の制御や挙動を指定する。
Cache-Control: キャッシュの動作を指定Connection: 接続の制御(例:keep-alive)Transfer-Encoding: チャンク転送などの転送形式Upgrade: プロトコルのアップグレード指示
🧭 ナビゲーション/リソース取得関連
どのリソースをどう取得するか、リクエスト元に関する情報を伝える。
Referer: リクエスト元のURLUser-Agent: ブラウザやデバイス情報Accept: 受け入れ可能なMIMEタイプAccept-Encoding: 受け入れ可能な圧縮形式Accept-Language: 使用言語の優先度
🛠 サーバーやアプリケーション情報
サーバーの動作環境やミドルウェアなどの情報を提供する。
Server: Webサーバーの種類X-Powered-By: フレームワークやライブラリの情報(※削除推奨)
🧾 認証・セッション関連
認証やユーザーのセッション状態に関係するヘッダー。
Authorization: 認証情報(Basic、Bearerなど)WWW-Authenticate: 認証が必要な場合のレスポンス指示Set-Cookie: Cookieの発行・更新Cookie: クライアントから送られたCookie情報
📦 CORS・クロスオリジン関連
他ドメインからのアクセス制御を管理するヘッダー。
Access-Control-Allow-Origin: 許可するオリジンAccess-Control-Allow-Credentials: Cookieなど資格情報の許可Access-Control-Allow-Headers: 許可されるヘッダーAccess-Control-Allow-Methods: 許可されるHTTPメソッド
リクエスト
リクエストヘッダーは、たとえば Authorization, User-Agent, Accept など、クライアントが送る情報
XMLHttpRequest.withCredentials
サイト間の Access-Control リクエストがCookie・認証ヘッダー・TLSクライアント証明書などの資格情報を使用して行うべきかどうかを示す。
異なるドメインからの XMLHttpRequest のレスポンスは、リクエストを行う前にwithCredentialsをtrueに設定しない限り、自身のドメインのCookie値を設定できません。
レスポンス
「ブラウザの動作をコントロールする」「次の通信に影響を与える」ようなものは、基本的に レスポンスヘッダー
| ヘッダー名 | 説明 |
|---|---|
Content-Security-Policy | 読み込めるスクリプト・画像・スタイル等の出所を制限するホワイトリスト型ポリシー。XSSなどの防止に非常に有効。 |
Cross-Origin-Opener-Policy | ブラウザのプロセスをオリジンごとに分離し、他のオリジンの干渉を防ぐ。 |
Cross-Origin-Resource-Policy | 他サイトがこのサイトのリソースを読み込むことを制限する。盗用や情報漏洩を防止。 |
Origin-Agent-Cluster | オリジン単位でJavaScriptの実行コンテキストを分離し、プロセスの隔離を強化する。 |
Referrer-Policy | リンク遷移時などに送信する Referer ヘッダーの内容を制御し、プライバシーを保護する。 |
Strict-Transport-Security | 一度HTTPSで接続されたサイトは今後も常にHTTPSで通信するようブラウザに強制する。 |
X-Content-Type-Options | ブラウザがContent-Typeと異なる内容を勝手に解釈しないようにする。MIMEスニッフィング対策。 |
X-DNS-Prefetch-Control | ブラウザがリンク先のDNSを事前解決するかどうかを制御する。 |
X-Download-Options | IE向けにダウンロードしたファイルの直接実行を防ぎ、「保存して開く」を強制する。 |
X-Frame-Options | 他サイトによる iframe 埋め込みを防ぐ。クリックジャッキング対策として有効。 |
X-Permitted-Cross-Domain-Policies | FlashやPDFなどAdobe製品による外部ドメインアクセスを制御する。 |
X-Powered-By | 使用中のWebフレームワークなどの情報を開示するが、攻撃者の手がかりになるため削除が推奨される。 |
X-XSS-Protection | 古いブラウザでのXSS対策だが、動作が不安定なためHelmetなどでは無効化されることが多い。 |
X-Powered-By
いくつかのWebアプリケーションフレームワークで、自身の名称やバージョン番号を記述するために使っているHTTPヘッダー
※セキュリティのため削除するのが好ましい。
Content-Security-Policy(CSP)
サーバーからブラウザへ「このページではこのようにスクリプトを制限してね」と命令するためのヘッダーです。
ページで何が起こり得るかを示す強力な許可リストで、多くの攻撃を軽減します クロスサイト・スクリプティング攻撃やその他のクロスサイト・インジェクションを防止するためにContent-Security-Policyヘッダーを設定します。
Strict-Transport-Security レスポンスヘッダー
WebサイトがブラウザにHTTPの代わりにHTTPSを用いて通信を行うように指示するためのもの。
Tips
IPアドレスから逆引きしてホスト名を取得する方法
- ホスト名はHTTPヘッダーには含まれないため、IPアドレスから逆引きして取得する
ホスト名はHTTPヘッダーには含まれないため、IPアドレスから逆引きして取得する。
Node.jsのdns.lookupServiceメソッドを使用してDNSサーバに問い合わせを行う。
import {lookupService} from "dns";
const getHostName = (ipAddress: string): Promise<string> => {
return new Promise(function(resolve, reject) {
lookupService(ipAddress, 22, function (error, hostname, service) {
if (error) {
return reject(error);
}
resolve(hostname);
});
});
};
const hostName = await getHostName(ipAddress);
dns.lookupServiceメソッドは、問い合わせ成功時にコールバック関数を介してホスト名を返却する。 任意の変数などに初期化するには、Promiseオブジェクトでラップして返却させる。
HTTP header
headerについてまとめる
リクエストヘッダーとレスポンスヘッダーがある
HTTPヘッダーのカテゴリ
HTTPヘッダーは用途ごとにいくつかのカテゴリに分類できます。以下に代表的なカテゴリとその例を示します。
🔐 セキュリティ関連
セキュリティを強化するために使用されるヘッダー。
Content-Security-Policy: XSSやデータインジェクションを防ぐStrict-Transport-Security: HTTPS通信を強制X-Frame-Options: クリックジャッキング対策X-Content-Type-Options: MIMEタイプスニッフィング防止Referrer-Policy: リファラー情報の制御
🌐 通信制御関連
クライアントとサーバ間の通信の制御や挙動を指定する。
Cache-Control: キャッシュの動作を指定Connection: 接続の制御(例:keep-alive)Transfer-Encoding: チャンク転送などの転送形式Upgrade: プロトコルのアップグレード指示
🧭 ナビゲーション/リソース取得関連
どのリソースをどう取得するか、リクエスト元に関する情報を伝える。
Referer: リクエスト元のURLUser-Agent: ブラウザやデバイス情報Accept: 受け入れ可能なMIMEタイプAccept-Encoding: 受け入れ可能な圧縮形式Accept-Language: 使用言語の優先度
🛠 サーバーやアプリケーション情報
サーバーの動作環境やミドルウェアなどの情報を提供する。
Server: Webサーバーの種類X-Powered-By: フレームワークやライブラリの情報(※削除推奨)
🧾 認証・セッション関連
認証やユーザーのセッション状態に関係するヘッダー。
Authorization: 認証情報(Basic、Bearerなど)WWW-Authenticate: 認証が必要な場合のレスポンス指示Set-Cookie: Cookieの発行・更新Cookie: クライアントから送られたCookie情報
📦 CORS・クロスオリジン関連
他ドメインからのアクセス制御を管理するヘッダー。
Access-Control-Allow-Origin: 許可するオリジンAccess-Control-Allow-Credentials: Cookieなど資格情報の許可Access-Control-Allow-Headers: 許可されるヘッダーAccess-Control-Allow-Methods: 許可されるHTTPメソッド
リクエスト
リクエストヘッダーは、たとえば Authorization, User-Agent, Accept など、クライアントが送る情報
XMLHttpRequest.withCredentials
サイト間の Access-Control リクエストがCookie・認証ヘッダー・TLSクライアント証明書などの資格情報を使用して行うべきかどうかを示す。
異なるドメインからの XMLHttpRequest のレスポンスは、リクエストを行う前にwithCredentialsをtrueに設定しない限り、自身のドメインのCookie値を設定できません。
レスポンス
「ブラウザの動作をコントロールする」「次の通信に影響を与える」ようなものは、基本的に レスポンスヘッダー
X-Powered-By
いくつかのWebアプリケーションフレームワークで、自身の名称やバージョン番号を記述するために使っているHTTPヘッダー
※セキュリティのため削除するのが好ましい。
Content-Security-Policy(CSP)
サーバーからブラウザへ「このページではこのようにスクリプトを制限してね」と命令するためのヘッダーです。
ページで何が起こり得るかを示す強力な許可リストで、多くの攻撃を軽減します クロスサイト・スクリプティング攻撃やその他のクロスサイト・インジェクションを防止するためにContent-Security-Policyヘッダーを設定します。
Strict-Transport-Security レスポンスヘッダー
WebサイトがブラウザにHTTPの代わりにHTTPSを用いて通信を行うように指示するためのもの。
Tips
IPアドレスから逆引きしてホスト名を取得する方法
- ホスト名はHTTPヘッダーには含まれないため、IPアドレスから逆引きして取得する
ホスト名はHTTPヘッダーには含まれないため、IPアドレスから逆引きして取得する。
Node.jsのdns.lookupServiceメソッドを使用してDNSサーバに問い合わせを行う。
import {lookupService} from "dns";
const getHostName = (ipAddress: string): Promise<string> => {
return new Promise(function(resolve, reject) {
lookupService(ipAddress, 22, function (error, hostname, service) {
if (error) {
return reject(error);
}
resolve(hostname);
});
});
};
const hostName = await getHostName(ipAddress);
dns.lookupServiceメソッドは、問い合わせ成功時にコールバック関数を介してホスト名を返却する。 任意の変数などに初期化するには、Promiseオブジェクトでラップして返却させる。
これの各説明が欲しい
Content-Security-Policy: Cross-Origin-Opener-Policy: ページのプロセスを分離するのに役立ちます Cross-Origin-Resource-Policy: 他のユーザーがリソースをクロスオリジンで読み込むのをブロックします Origin-Agent-Cluster: プロセス分離をオリジンベースに変更 Referrer-Policy:Refererヘッダーを制御します Strict-Transport-Security: ブラウザにHTTPSを優先するように指示します X-Content-Type-Options: MIMEスニッフィングを回避 X-DNS-Prefetch-Control: DNSプリフェッチを制御する X-Download-Options: ダウンロードを強制的に保存します (Internet Explorer のみ) X-Frame-Options:クリックジャッキング攻撃を軽減するレガシーヘッダー X-Permitted-Cross-Domain-Policies: AcrobatなどのAdobe製品のクロスドメイン動作を制御します X-Powered-By: ウェブサーバーに関する情報。単純な攻撃に利用される可能性があるため削除されました。 X-XSS-Protection: XSS攻撃を軽減しようとするレガシーヘッダーですが、事態を悪化させるため、Helmetはそれを無効にします。