【ITニュース解説】Fingerprinting a website's tech stack from a single HTTP request (no headless browser)
2026年09月05日に「Dev.to」が公開したITニュース「Fingerprinting a website's tech stack from a single HTTP request (no headless browser)」について初心者にもわかりやすく解説しています。
ITニュース概要
Webサイトがどんな技術(CMSやJSフレームワーク等)で作られているかを高速に特定する手法が紹介されている。ヘッドレスブラウザを使わず、HTTPリクエストのヘッダーやmetaタグ、スクリプトのドメイン情報から判別する。軽量で高速だが、検出可能な技術は限定的だ。
ITニュース解説
システムエンジニアを目指す皆さん、ウェブサイトがどのような技術で作られているか、気になったことはありませんか?例えば、どのCMS(コンテンツ管理システム)を使っているのか、どんなJavaScriptフレームワークが動いているのか、分析ツールは何を使っているのか、といった情報です。これらの情報を知ることは、ウェブサイトの構造を理解したり、新しい技術を学んだりする上で非常に役立ちます。
今回紹介する記事は、「たった一つのHTTPリクエストからウェブサイトの技術スタックを特定する」という、まさにこの疑問に答えるための新しいアプローチについて解説しています。このアプローチの大きな特徴は、「ヘッドレスブラウザ」と呼ばれる、画面表示のないウェブブラウザを使わずに、高速かつ効率的に技術を特定できる点です。
まず、「技術スタック」という言葉について簡単に説明します。これは、ウェブサイトを構築するために使われている様々な技術の組み合わせを指します。例えば、WordPressというCMS、ReactというJavaScriptフレームワーク、Google Analyticsという分析ツール、CloudflareというCDN(コンテンツ配信ネットワーク)などが組み合わさって一つのウェブサイトができています。これら一つ一つがウェブサイトの「技術スタック」を構成する要素です。
通常、ウェブサイトの技術スタックを特定するには、Wappalyzerのような既存のツールがよく使われます。これらのツールは非常に多機能ですが、中には「ヘッドレスブラウザ」を使用してJavaScriptを実行し、ページを完全にレンダリング(描画)してから情報を収集するものもあります。ヘッドレスブラウザを使う方法は、より多くの情報を取得できる反面、起動に時間がかかったり、多くのリソース(コンピュータの処理能力やメモリ)を消費したりするという欠点があります。
この記事で紹介されているアプローチは、この問題を解決し、もっと素早く、もっと少ないリソースで技術スタックを特定しようとするものです。その核心となるのは、ウェブサイトのホームページに対して「たった一度のプレーンなHTTPリクエスト」を送るだけ、というシンプルな手法です。HTTPリクエストとは、皆さんがウェブブラウザでURLを入力したときに、そのウェブサイトのサーバーに対して「このページを表示してください」と要求を送るのと同じ仕組みです。
このツールでは、まず「CrawleeのCheerioCrawler」というライブラリを使って、対象のウェブサイトのホームページのHTMLコンテンツを一つ取得します。CheerioCrawlerは、取得したHTMLを簡単に解析できるようにしてくれるツールです。そして、この取得したHTMLコンテンツと、ウェブサーバーからの「レスポンスヘッダー」という情報の中から、以下の三つの要素に注目して分析します。
一つ目は、「レスポンスヘッダー」です。これは、ウェブサーバーがHTTPリクエストに対する応答として送り返してくる情報の一部で、ウェブサイトのコンテンツ本体よりも先に届きます。レスポンスヘッダーには、ウェブサーバーの種類(例: Server: nginx)、ウェブサイトがどのアプリケーションフレームワークで動いているか(例: X-Powered-By: PHP/8.1.2)、どのCDNを使っているか(例: CF-RayならCloudflare、X-Vercel-IdならVercel)など、様々なヒントが含まれています。これらの情報は、ウェブサイトの背後にあるインフラや技術の一部を教えてくれます。
二つ目は、HTMLの<meta name="generator">タグです。これは、ウェブサイトのHTMLコードの中に埋め込まれている特殊なタグで、そのウェブサイトがどのシステムによって生成されたかを示す場合があります。例えば、WordPressで構築されたサイトでは、このタグに「WordPress」という文字列が含まれていることがよくあります。このタグは、特定のCMSを特定する上で非常に直接的な手がかりとなります。
三つ目は、ページ内の<script src>タグが示す「スクリプトファイルのドメイン」です。ウェブサイトは、Google Analyticsのような分析ツール、Stripeのような決済サービス、Zendeskのようなライブチャットウィジェットなど、様々な外部サービスをJavaScriptファイルとして読み込んでいます。これらのJavaScriptファイルを読み込むためのHTMLタグが<script src="https://example.com/script.js"></script>です。このsrc属性に指定されているURLのドメイン(例: google-analytics.comやstripe.com)をチェックすることで、そのサイトが利用しているサードパーティサービスを特定することができます。
これらの三つの要素から得られた情報を、「シグネチャテーブル」と呼ばれる既知の技術パターンが記述されたリストと照合します。シグネチャテーブルには、例えば「レスポンスヘッダーにX-Powered-By: PHPが含まれていたらPHPが使われている」「<meta name="generator">タグにwordpressが含まれていたらWordPressが使われている」といった、特定の技術を識別するためのルール(テスト関数)が書かれています。このツールでは、約30種類の技術を、CMS、ECプラットフォーム、JavaScriptフレームワーク、分析ツール、CDN/ホスティング、決済、ライブチャットの7つのカテゴリに分類して特定します。
このアプローチの大きな特徴は、意図的にやらないことを明確にしている点です。まず、「ヘッドレスブラウザを使わない」こと。これにより、JavaScriptの実行を伴わないため、高速であり、ログインが必要なページや特別な保護をバイパスすることなく、誰でもアクセスできる公開情報のみを使って技術を特定します。これは、セキュリティ上のリスクを低減し、より倫理的な方法で情報を収集することを意味します。
次に、「推測を行わない」こと。もしシグネチャテーブルのどのパターンにも一致しない場合は、そのカテゴリについては「何も見つからなかった」という空の結果を返します。あいまいな推測や間違った情報を返すよりも、確実な情報だけを提供するという方針です。これは、検出できる技術の数は限られるものの、その情報の信頼性を高めることにつながります。
もちろん、このアプローチには限界もあります。手書きで定義された約30種類のシグネチャセットに依存するため、Wappalyzerのように何百もの技術を検出することはできません。もしウェブサイトが、このシグネチャテーブルに含まれていないニッチな技術を使っていた場合、その技術は特定されず、結果は空になるでしょう。しかし、開発者はこれを「欠点」ではなく「意図的なトレードオフ」として捉えています。つまり、精度を高く保ちつつ、本当に必要な技術だけを効率的に特定するという考え方です。新しい技術のシグネチャの追加は簡単に行えるため、実際の需要に応じて、必要であれば今後も拡張していくことが可能です。
この技術スタック特定ツールは、GitHubでソースコードが公開されており、Apifyというプラットフォーム上ではセットアップ不要で利用できるホスト版も提供されています。システムエンジニアを目指す皆さんにとって、ウェブサイトがどのように作られているかを素早く知ることは、技術学習の大きな手助けとなります。このツールは、ウェブの裏側で何が動いているのかを、最小限の手間で明らかにするためのスマートな方法を示していると言えるでしょう。