ブラウザの指紋とは何ですか?
ブラウザの指紋は、クッキーやIPアドレスに依存するのではなく、ブラウザとデバイスから一意の属性を収集することによって、ユーザーの識別する追跡技術です。 アンチボットシステムは、自動スクリプト、ヘッドレスブラウザ、プロキシベースのスクレーパーから、実際の人間の訪問者を識別するために指紋を使用する。
クッキーとは違い、指紋は簡単にクリアできません。 キャンバスレンダリング、WebGLパラメーター、AudioContext出力、ナビゲータープロパティ、フォント、画面解像度など、さまざまな信号から組み立てられます。 これらのシグナルを組み合わせると、各ブラウザインスタンスにほぼ一意の識別子が作成されます。
ご利用者様へ ウェブスクレイピングのためのプロキシブラウザの指紋を理解することは不可欠です。 IPアドレスを単独で回転させると、指紋がリクエスト全体で一貫したままであれば不十分です。 アンチボットシステムがプロキシを検出する方法をガイド. .
キャンバスの指紋
キャンバスの指紋は、目に見えない画像を描画し、ピクセルレベルのデータを抽出するために、HTML5キャンバスAPIを利用します。 異なるGPU、ドライバ、およびレンダリングエンジンは、同じ図面の指示に若干異なる出力を生成するため、結果の画像ハッシュは指紋として機能します。
仕組み
アンチボットスクリプトは非表示を注入します 要素、テキスト、グラデーション、図形を描画し、呼び出します。 toDataURL() または getImageData() ハッシュを抽出する。 このプロセスは、ユーザーが見えないが、ハードウェアとソフトウェア特性を明らかにします。
// Example: how detection scripts extract canvas fingerprints
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillStyle = '#f60';
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = '#069';
ctx.fillText('ProxyHat fingerprint test', 2, 15);
const hash = canvas.toDataURL();
// Each GPU/driver combo produces a different hash
対策
- キャンバスの騒音の注入: Puppeteer Extraのステルスプラグインのようなツールは、ランダムなノイズをキャンバス出力に追加し、各読書をページレンダリングなしで一意にします。
- 一貫したスプーフィング: ランダムなノイズよりも、キャンバス出力を特定のブラウザプロファイルに合わせ、一貫性チェックを渡す。
- ヘッドレスブラウザ検出: 一部のシステムは、キャンバス操作が疑わしい均一な結果を返すかどうかをチェックします(デフォルトのヘッドレスChromeで見られるように)。 使用方法 適切なステルス構成 これを緩和する。
WebGL の指紋
WebGLの指紋プローブは、ブラウザの3Dレンダリング機能を備えています。 GPUベンダー、レンダラー文字列、サポートされた拡張機能、シェーダー精度フォーマットをクエリして、ハードウェアレベルの指紋を作成できます。
集められた主信号
| シグナル | それが明らかにするもの | 検出リスク |
|---|---|---|
| サイトマップ | GPUベンダーとモデル(例:NVIDIA GeForce RTX 4090) | 高 — ユーザエージェントとの不一致は赤色フラグ |
| サポートされている拡張子 | ハードウェア機能プロフィール | ミディアム — ドライバーバージョンによって異なります |
| MAX TEXTURE サイズ | GPUメモリと機能ティア | メディア |
| シェーダーの精密 | Vertex/fragmentシェーダーのフロート/int精度 | 低 — しかし、合成指紋に追加 |
対策
- スプーフレンダー文字列: オーバーライド
WEBGL_debug_renderer_infoユーザーエージェントの要求されたプラットフォームにマッチします。 - 無効なWebGL: セットアップ
--disable-webglヘッドレスクロムでは、指紋を防止するが、WebGLサポートを期待するサイトの検出をトリガーする可能性があります。 - 一貫したプロファイルを使用する: navigator プロパティ、画面解像度、プラットフォーム文字列をマッチングする WebGL パラメータをペアリングします。
AudioContext の指紋
AudioContext の指紋は、Web Audio API を使用して、音声信号を生成し、出力を分析します。 異なるオーディオスタック(ハードウェア+ OS +ブラウザ)は、わずかに異なる信号処理結果を生成し、ユニークな音響指紋を作成します。
検出スクリプトがそれを使用する方法
// Simplified AudioContext fingerprinting technique
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const oscillator = audioCtx.createOscillator();
const analyser = audioCtx.createAnalyser();
const gainNode = audioCtx.createGain();
const scriptProcessor = audioCtx.createScriptProcessor(4096, 1, 1);
oscillator.type = 'triangle';
oscillator.frequency.setValueAtTime(10000, audioCtx.currentTime);
gainNode.gain.setValueAtTime(0, audioCtx.currentTime);
oscillator.connect(analyser);
analyser.connect(scriptProcessor);
scriptProcessor.connect(gainNode);
gainNode.connect(audioCtx.destination);
// The resulting buffer values differ per hardware/OS
対策
- 可聴周波騒音の注入: キャンバスノイズ注射と同様に、AudioContext出力に微妙なランダムノイズを追加します。
- API のインターセプション: AudioContext メソッドをオーバーライドし、ターゲットブラウザープロファイルにマッチする一貫性のある事前記録された値を返します。
- プロフィールの一致: 指紋(OS、ブラウザバージョン、ハードウェアクレーム)の残りの部分とAudioContext出力が整列されていることを確認してください。
操縦者およびプラットホームの指紋
ザ・オブ・ザ・ navigator オブジェクトは、ブラウザのアイデンティティ、OS、インストールされたプラグイン、言語の好み、およびハードウェアの機能を明らかにするプロパティの数十を公開します。 アンチボットシステムでは、これらの値を一貫性のためにクロスリファレンスします。
重要なナビゲーターのプロパティ
| プロパティ | それが明らかにするもの | 共通の近道 |
|---|---|---|
| navigator.userエージェント | ブラウザとOSの文字列 | 実際のレンダリング動作によるMismatch |
| ナビゲーター・プラットフォーム | OSプラットフォーム(Win32、MacIntel、Linux x86 64) | プラットフォームは「MacIntel」と言いますが、フォントはWindowsのみです。 |
| navigator.hardwareConcurrencyの特長 | CPUコアカウント | ヘッドレス環境は、1-2コアを報告することが多い |
| ナビゲーション | デバイスRAM(約) | 非常に低い値は仮想環境を示します |
| ナビゲーター.言語 | 優先言語リスト | 単一言語または受諾言語ヘッダーとの不一致 |
| ナビゲーター.webdriver | オートメーションフラグ | Selenium/Puppeteer を非パッチ化 |
対策
- パッチnavigator.webdriver: 常に保障して下さい
navigator.webdriverフィードバックundefinedまたはfalse自動化セットアップで。 - 一貫性のあるプロパティチェーン: Windowsのあなたのユーザー エージェントの要求のChromeなら、保障して下さい
navigator.platformは「Win32」です。navigator.hardwareConcurrency4-16で、navigator.deviceMemoryは 4-8 です。 - 一致の言語ヘッダー: 確認する
navigator.languagesマッチするAccept-LanguageHTTP ヘッダーとプロキシのジオロケーションと整列します。
合成の指紋およびEntropy
単一の指紋信号は決定的ではないです。 アンチボットシステムは、数千の信号を複合指紋に結合し、高エントロピーで十分な量の情報を組み合わせ、何百万ものブラウザを一意に識別します。
Entropyが追加する方法
| シグナル | 近似エントロピー(ビット) |
|---|---|
| キャンバスハッシュ | 8月12日 |
| WebGLレンダー | 6-10 日 |
| オーディオコンテクスト | 日 時 |
| フォントのインストール | 10-15の |
| スクリーンの決断+色の深さ | 4-6日 |
| Navigatorプロパティ(コンビネーション) | 8月12日 |
| タイムゾーン + ロケール | 3-5日 |
結合されたエントロピーの40 +ビットを使って、合成の指紋はIPsが回るときでさえブラウザを独特に識別できます。 だからこそ 正しいプロキシタイプを選ぶ 効果的な対策戦略の1つだけ。
ブラウザの指紋検出フロー
典型的な検出パイプラインを理解することで、自動化がフラグを立てる場所を特定できます。
- クライアント側コレクション: JavaScript はページの読み込み(多くの場合難読化)で指紋プローブを実行します。
- サーバー側の分析: 収集された信号は分析のための反ボット バックエンドに送られます。
- クロスリファレンスチェック: 指紋は、既知の自動化署名(ヘッドレスChromeのデフォルト、セレンマーカーなど)と比較しています。
- 一貫性の検証: 個々の信号は、不可能な組み合わせ(例えば、WindowsフォントでmacOSユーザーエージェント)のためにクロスチェックされます。
- 行動オーバーレイ: 指紋データは、最終的なリスクスコアの行動信号(マウスの動き、スクロールパターン、タイミング)と組み合わせられます。
回転する プロキシ IPアドレスを変更しますが、ブラウザの指紋を変更しません。 有効な反検出は両方層を同時に取り組むことを要求します。
一貫性のあるブラウザプロファイルの構築
指紋検出に対する最も信頼性の高い対策は、すべての信号を介した一貫した現実的なブラウザプロファイルを維持しています。 建物のチェックリストは次のとおりです。
- 対象ブラウザ/OSの組み合わせを選択 マッチする 使用事例 そしてプロキシの位置。
- すべてのナビゲーターの特性を一直線に並べる — ユーザエージェント、プラットフォーム、ハードウェア通貨、デバイスメモリ、言語。
- マッチキャンバスとWebGL出力 要求されたハードウェアプロファイルに。
- タイムゾーンとロケールを設定する あなたのプロキシの地理的な位置に合わせて(使用) ProxyHatのジオターゲットプロキシ)。
- リアルな画面解像度を使用する — 2026年に800x600のような珍しいサイズを避けます。
- 一貫性のあるフォントリストを注入する 要求されたOSにマッチする。
- プロファイルをプロキシと一緒に回転させる — 各新しいIPは、理想的には異なる(内部的に一貫した)指紋を運ぶ必要があります。
実装の詳細について フィードバック または ノード.js言語固有のプロキシガイドを参照してください。
指紋管理のためのツールとライブラリ
Puppeteer Extra Stealth プラグイン
// Install: npm install puppeteer-extra puppeteer-extra-plugin-stealth
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
const browser = await puppeteer.launch({
args: [
'--proxy-server=http://gate.proxyhat.com:8080'
]
});
const page = await browser.newPage();
await page.authenticate({
username: 'USERNAME',
password: 'PASSWORD'
});
// Stealth plugin patches navigator.webdriver, chrome.runtime,
// permissions, plugins, languages, WebGL, and more
カスタム指紋でプレイライト
// Playwright provides built-in device emulation
const { chromium, devices } = require('playwright');
const browser = await chromium.launch({
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'USERNAME',
password: 'PASSWORD'
}
});
const context = await browser.newContext({
...devices['Desktop Chrome'],
locale: 'en-US',
timezoneId: 'America/New_York',
geolocation: { latitude: 40.7128, longitude: -74.0060 },
permissions: ['geolocation']
});
追加の構成例については、 ProxyHatのドキュメント. .
避ける一般的な指紋の間違い
- 回転指紋なしでIPを回すこと: 同じ指紋が異なるIPから出現すると、アンチボットシステムが通知されます。これは強力なオートメーション信号です。
- デフォルトのヘッドレスChromeを使用して: 変更されていないヘッドレスクロムは、検出可能なマーカーの数十を持っています(プラグイン、特定のWebGL値、navigator.webdriver = true)。
- 有能なプロフィール: macOSでSafariであることを目指しているが、Windows固有のフォントやDirectX WebGLレンダラーを公開する。
- ヘッダーの順序を無視して下さい: 実際のブラウザは HTTP ヘッダーを特定の順序で送信します。 オートメーションライブラリは、さまざまな順序でそれらを送信することが多いです。 HTTP/2 指紋処理. .
- 過剰注油: 組み合わせが非現実的であるならば、あまりにも多くの対策を加えることは、それ自体が指紋になることができます。
倫理的考慮事項
ブラウザの指紋対策は、責任を持って使用する必要があります。 Legitimate の使用は下記のものを含んでいます:
- 指紋脆弱性のために独自のWebアプリケーションをテスト
- プライバシー研究と学術研究
- 攻撃的なアンチボットシステムが誤ってブロックする公開可能なデータにアクセスする
- 独自の特性の品質保証と自動化テスト
ウェブサイトの利用規約、robots.txt命令、および適用されるデータ保護規則を常に尊重します。 使用条件 ProxyHatの住宅用プロキシ 正当なアクセス制御を回避するのではなく、現実的なトラフィックパターンを維持します。






