HTTPヘッダー解析ツール - セキュリティヘッダー解析・監査 オンライン
HTTPヘッダーを解析し、セキュリティ脆弱性、キャッシュ動作、CORS設定を監査します。実行可能な推奨事項付きのセキュリティスコアを取得 — 100%クライアントサイド、サーバーへのデータ送信なし。
よくある質問
HTTPヘッダー解析ツールとは何ですか?
HTTPヘッダー解析ツールは、生のHTTPヘッダー(リクエストとレスポンスの両方)を解析し、各ヘッダーについて人間が読める説明を提供するツールです。ヘッダーを機能別(セキュリティ、キャッシュ、CORS、コンテンツなど)に分類し、Content-Security-Policy、Strict-Transport-Security、X-Frame-Optionsなどの重要なセキュリティヘッダーの存在と正確性をチェックするセキュリティ監査を実行し、セキュリティスコアを生成します。
このツールはどのように使いますか?
1. ブラウザのDevTools(ネットワークタブでリクエストをクリックしてヘッダーを表示)、curl -vの出力、またはサーバーログからHTTPヘッダーをコピーします。2. テキストエリアに生のヘッダーを貼り付けます。3. リクエストヘッダーまたはレスポンスヘッダーを選択します。4. 解析済みヘッダータブで結果を確認します。5. セキュリティ監査タブでスコアを確認します。
データは安全ですか?サーバーに送信されますか?
完全に安全です。このツールはクライアントサイドJavaScriptを使用して100%ブラウザ内で実行されます。ヘッダー、URL、その他のデータがサーバーに送信されることはありません。すべての解析はブラウザ内でローカルに行われます。
すべてのウェブサイトに必要なセキュリティヘッダーは何ですか?
すべてのウェブサイトは以下の重要なセキュリティヘッダーを実装すべきです:(1) HTTPSを強制するStrict-Transport-Security (HSTS)。(2) XSSを防止するContent-Security-Policy (CSP)。(3) X-Content-Type-Options: nosniff。(4) クリックジャッキングを防止するX-Frame-Options: DENY。(5) Referrer-Policy。(6) Permissions-Policy。
Content-Security-Policy (CSP)とは何ですか?
Content-Security-Policyは、ページで読み込み可能なコンテンツのソースをブラウザに指示するHTTPレスポンスヘッダーです。クロスサイトスクリプティング(XSS)攻撃に対する最も強力な防御手段の一つです。CSPはdefault-src、script-src、style-srcなどのディレクティブを使用して特定のオリジンを許可します。
セキュリティスコアはどのように計算されますか?
セキュリティスコアは、重要なセキュリティヘッダーの存在と設定品質に基づく0-100の数値評価です。HSTS(15点)、CSP(20点)、X-Frame-Options(10点)、X-Content-Type-Options(10点)、Referrer-Policy(10点)、Permissions-Policy(10点)、COOP(5点)、CORP(5点)、COEP(5点)、バージョン漏洩ヘッダーの不在(10点)。
リクエストヘッダーとレスポンスヘッダーの違いは何ですか?
リクエストヘッダーはクライアント(ブラウザ)からサーバーに送信され、User-Agent、Accept、Authorization、Cookieなどの情報を含みます。レスポンスヘッダーはサーバーからクライアントに送信され、Content-Type、Cache-Control、セキュリティヘッダー、Set-Cookie、CORSヘッダーを含みます。セキュリティ監査は主にレスポンスヘッダーに適用されます。
コード例
// HTTP Header Parser and Security Analyzer
function parseHttpHeaders(rawHeaders) {
const headers = [];
for (const line of rawHeaders.split('\n')) {
let cleaned = line.trim();
if (!cleaned) continue;
if (/^HTTP\/[\d.]+\s+\d+/.test(cleaned)) continue;
if (/^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS)\s+/.test(cleaned)) continue;
cleaned = cleaned.replace(/^[<>]\s*/, '');
if (!cleaned) continue;
const i = cleaned.indexOf(':');
if (i === -1) continue;
const name = cleaned.substring(0, i).trim();
const value = cleaned.substring(i + 1).trim();
if (name) headers.push({ name, value });
}
return headers;
}
const SECURITY_CHECKS = [
{ header: 'strict-transport-security', label: 'HSTS', weight: 15 },
{ header: 'content-security-policy', label: 'CSP', weight: 20 },
{ header: 'x-frame-options', label: 'X-Frame-Options', weight: 10 },
{ header: 'x-content-type-options', label: 'X-Content-Type-Options', weight: 10 },
{ header: 'referrer-policy', label: 'Referrer-Policy', weight: 10 },
{ header: 'permissions-policy', label: 'Permissions-Policy', weight: 10 },
];
function auditSecurity(headers) {
const map = new Map(headers.map(h => [h.name.toLowerCase(), h.value]));
let score = 0;
const results = [];
for (const check of SECURITY_CHECKS) {
const value = map.get(check.header);
if (value) {
score += check.weight;
results.push({ header: check.label, status: 'pass', value });
} else {
results.push({ header: check.label, status: 'fail', value: null });
}
}
// Check info leakage
if (!['server', 'x-powered-by'].some(h => map.has(h))) score += 10;
const grade = score >= 95 ? 'A+' : score >= 85 ? 'A' :
score >= 75 ? 'B' : score >= 60 ? 'C' : score >= 40 ? 'D' : 'F';
return { score, grade, results };
}
// Example usage
const raw = `Content-Type: text/html\nStrict-Transport-Security: max-age=31536000\nX-Frame-Options: DENY\nX-Content-Type-Options: nosniff`;
const parsed = parseHttpHeaders(raw);
const audit = auditSecurity(parsed);
console.log(`Score: ${audit.score}/100 (${audit.grade})`);