RevealThemeの検出ツールの仕組み
いずれかの検出ツールにURLを入力すると、結果が表示されるまでの2秒間に多くのことが起こります。好奇心旺盛な方のために、エンジニアリングでは解決できない制約も含めて、技術的な解説をご紹介します。
ステップ1:公開HTMLを取得する
URLを送信すると、当サイトのサーバーは標準的なブラウザのUser-Agentを使って、そのURLの公開ウェブページを取得します。これは、あなたがそのサイトを直接訪問した場合にブラウザが受け取るのと同じHTMLです。当サイトは有料の壁を回避したり、ログインで保護されたコンテンツを抽出したり、いかなる認証も使用したりしません。
取得には20秒のタイムアウトを使用します。最大10回のリダイレクト(HTTP→HTTPS、www→www無し、国別リダイレクトをカバーします)を追跡します。サイトが4xxまたは5xxのレスポンスを返した場合、あるいはタイムアウトの時間内に応答しない場合、推測する代わりに明確な「アクセスできませんでした」というエラーを返します。
ステップ2:プラットフォームを検出する
特定のテーマを識別しようとする前に、サイトがどのCMSで動作しているかを確認します。対応する7つのプラットフォーム(WordPress、Shopify、Magento、Joomla、Drupal、Moodle、PrestaShop)の痕跡を探し、最も強く一致するものを選びます。
ShopifyのURLを当サイトのWordPress検出ツールに送信した場合(またはその逆)、その旨をお伝えし、正しい検出ツールへのリンクを示します。推測はせず、誤検出もありません。
ステップ3:テーマの検出
WordPressに関して言えば、テーマへの参照は通常、wp-content/themes/テーマ名/style.cssのようなパスでページのHTMLに現れます。当サイトは、linkタグ、scriptタグ、インラインJavaScript、JSON-LDブロック、さらにはテキストコンテンツに至るまで、ドキュメントのあらゆる場所からそうした各参照を抽出します。これにより、高度に最適化されたサイトが標準的な検出ツールから隠しているテーマを検出できます。
検出された各テーマについて、当サイトはそのテーマのstyle.cssファイルの取得を試みます。そのファイルのヘッダーには、テーマの公式名、作者、バージョン、URI、説明が、テーマ開発者から直接記載されています。これが、検出結果とともに表示する豊富なテーマ情報の出どころです。
ステップ4:プラグインの検出
プラグインの検出には、2つの並行アプローチを使用します。まず、wp-content/plugins/プラグイン名/に一致するファイルパスをすべて抽出します。次に、数十のシグネチャベースのチェックを実行します。特定のHTML構造、CSSのクラス名、インラインJavaScript変数、そしてElementor、Yoast SEO、WPForms、WooCommerce、Wordfenceなどの人気プラグインを一意に識別するHTTPレスポンスヘッダーを探します。
この二重アプローチの設計により、(キャッシュやアセットのバンドルによって)ファイルパスを隠していても、それでも特徴的なシグネチャを残しているプラグインを検出できます。検出された各プラグインについて、WordPress.orgのプラグインディレクトリで検索し、プラグインの公式名、説明、作者、スクリーンショットで結果を充実させます。
ステップ5:ホスティング+DNSの検索
ホスティングプロバイダーを特定するために、ドメインのDNS検索を行い、IPアドレス、ASN、逆引きDNSを調べます。それを既知のホスティングプロバイダーのIP範囲のデータベースと照合し、プロバイダーを特定します。精度は主要なホスティング(AWS、Cloudflare、Hostinger、SiteGroundなど)では高く、ニッチなプロバイダーでは低くなります。
当サイトにできないこと
どれだけコードが優れていても、検出が機能しないケースがいくつかあります。
- Cloudflareのボットチャレンジ。厳格なCloudflareのボット保護(「セキュリティチェックを実行しています…」という画面)のあるサイトは、あらゆる自動リクエストをブロックするのと同様に、当サイトの取得をブロックします。これをきれいに回避する方法はありません。
- 大幅にカスタマイズされたテーマ。テーマが、元のテーマ名へのすべての参照がHTMLから削除されるほど改変されている場合、検出できるものが何もありません。
- アセットパスを書き換える積極的なキャッシュ。LiteSpeed Cache、WP Rocket、CloudflareのRocket Loaderのようなプラグインは、出どころを隠すためにアセットのURLを書き換えることがあります。当サイトのシグネチャベースの検出はそのほとんどを捕捉しますが、すべてではありません。
- 静的エクスポートのサイト。静的HTMLにエクスポートされたWordPressサイトは、検出を可能にするランタイムのシグネチャの大半を失います。
当サイトが行わないこと
よく尋ねられます。答えはいずれもノーです。
- 送信されたURLを保存しません
- マーケティング目的でIPアドレスを記録しません
- 検出データをプロバイダーと共有しません
- 認証、robots.txt、その他のアクセス制御を回避しません
- セキュリティ上の理由から、内部/プライベートIP(127.0.0.1、10.x.x.xなど)では検出ツールを実行しません
プライバシーの詳細については、当サイトのプライバシーポリシーをご覧ください。
APIアクセス
現在、公開APIは提供していませんが、代理店や研究者向けに限定的なプログラムによるアクセスをご要望に応じて提供しています。利用目的と想定されるリクエスト量を添えてhello@revealtheme.comまでご連絡ください。
なぜオープンソースではないのですか?
検出ルールは製品の中核であり、テーマやプラグインの進化に合わせて頻繁に更新しています。そのコードを公開すると、当サイトの更新ペースが遅くなってしまいます。とはいえ、検出技術に関する詳細な記事をブログで公開しています。「検出」で検索すると見つかります。
試してみる準備はできましたか?
検査したいサイトに合った検出ツールをお使いください。